【问题标题】:Problem to display Sqlite3 View in ruby-2.7在 ruby​​-2.7 中显示 Sqlite3 视图的问题
【发布时间】:2020-08-16 03:48:06
【问题描述】:

我在显示使用 ruby​​ 创建的视图(在 sqlite3 中成功)时遇到问题。

下面是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​​ 中使用一个简单的 select 语句来显示这个视图

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 sqlite sqlite3-ruby


    【解决方案1】:

    当您说我可以在 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;
    

    【讨论】:

    • 是的,我试过 SELECT * FROM members_ytd_totals;和同样的错误。我也给所有东西起了别名,但仍然是同样的错误。
    • 我看到了您尝试对我的答案进行的编辑(您不应该编辑我的答案,而是您的问题)。您确实没有用表的别名限定所有列名。特别是id,这是一个模棱两可的列。只需复制并粘贴我的代码即可。
    • 对不起,我编辑了你的答案,我出错了。是的,既然我已经限定了所有列,它就可以完美地工作了。优秀!!!百万感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多