Проблема с отображением Sqlite3 View в ruby -2,7 - PullRequest
1 голос
/ 01 мая 2020

У меня проблемы с отображением созданного мною представления (успешно в sqlite3) с использованием ruby.

Ниже приведено представление sqlite

CREATE VIEW members_ytd_totals AS
    SELECT id AS MemberID,
    first_name,
    last_name,
    ipu_dues.total AS TotalDues,
    ipu_levy.total AS TotalLevy,
    ipu_fines.total AS TotalFines,
    ipu_donation.total AS TotalDonations,
    ipu_registration.total AS TotalRegistrations

FROM ipu_profile
       INNER JOIN
       ipu_dues ON ipu_dues.id = ipu_profile.id
       INNER JOIN
       ipu_levy ON ipu_levy.id = ipu_profile.id
       INNER JOIN
       ipu_fines ON ipu_fines.id = ipu_profile.id
       INNER JOIN
       ipu_donation ON ipu_donation.id = ipu_profile.id
       INNER JOIN
       ipu_registration ON ipu_registration.id = ipu_profile.id;

обычно я должен иметь возможность использовать простой оператор выбора в ruby для отображения этого представления как

require 'sqlite3'
require 'sqlite_print_table'
db = SQLite3::Database.open 'database.db'
db.print_table("SELECT * FROM members_ytd_totals", guide_tolerance: 4, width_tolerance: 5, margin: 10)

однако Я получаю исключение базы данных. Возникло неоднозначное имя столбца: id

, однако внутри sqlite3 это представление было создано правильно, без ошибок, и я могу увидеть представление в Sqlite studio. Я просто не могу отобразить его в ruby. Есть идеи, в чем может быть проблема?

Спасибо

1 Ответ

0 голосов
/ 01 мая 2020

Когда вы говорите Я вижу представление в Sqlite studio , вы имеете в виду, что представление было создано без каких-либо ошибок. Но пытались ли вы использовать его, скажем, с:

SELECT * FROM members_ytd_totals;

вы получите ту же ошибку. Используйте псевдонимы, особенно в таких случаях, когда задействовано несколько объединений и всегда уточняют имена столбцов с именем / псевдонимом таблицы, чтобы избежать неоднозначностей:

CREATE VIEW members_ytd_totals AS 
SELECT 
  p.id AS MemberID, p.first_name, p.last_name, 
  d.total AS TotalDues, l.total AS TotalLevy, 
  f.total AS TotalFines, n.total AS TotalDonations, 
  r.total AS TotalRegistrations 
FROM ipu_profile p
INNER JOIN ipu_dues d ON d.id = p.id 
INNER JOIN ipu_levy l ON l.id = p.id 
INNER JOIN ipu_fines f ON f.id = p.id 
INNER JOIN ipu_donation n ON n.id = p.id 
INNER JOIN ipu_registration r ON r.id = p.id;
...