【问题标题】:SEQUEL Postgres join querySEQUEL Postgres 连接查询
【发布时间】:2013-05-29 08:23:20
【问题描述】:

我正在努力使用 postgres 和 Ruby 的 SEQUEL 进行简单的连接查询。

我有表 1(候选名单),其中包含以下列:id、shortname

和表 2(shortmembers)与列:id、short_id(对候选名单 id 的引用)

我想选择 shortmembers id 和 shortlists shortname。因此,在常规 SQL 中,它会是

SELECT shortlists.shortname, shortmembers.id WHERE shortmembers.short_id = shortlists.id

我试过了

@shortmembers = DB[:shortlists].join(:shortmembers, :id => :short_id) 

然后是ruby代码:

<option value="">Populated Shortlists ..</option>
        <% @shortmembers.each do |shortmember| %>
        <option value="<%= shortmember[:id] %>"><%= shortmember[:shortname] %></option>
        <% end %>

我收到一条错误消息,导致我认为连接查询不起作用。它是:

nil:NilClass 的未定义方法 `each'

感谢所有帮助!

【问题讨论】:

    标签: ruby postgresql sequel


    【解决方案1】:

    我想通了。正确的查询是:

    @shortmembers = DB[:shortlists].distinct(:shortname).join(:shortmembers, :short_id => :id)

    顺便说一句,distinct 很重要,否则“短名称”的每个示例都会重复。

    问题不在于查询的构造,而在于 shortlists 表中的“id”列是整数类型,而 shortmembers 表中相应的 short_id 列是 varchar 类型。 Postgres 对此感到不安。当我将 short_id 更改为“int”时没有问题。

    我希望这对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      从错误消息看来,@shortmembers 在您的模板中是 nil。从您发布的早期代码来看,它应该是一个数据集。所以看起来模板没有在与早期代码相同的上下文/绑定中执行。

      【讨论】:

      • 谢谢我意识到这一点。我只是想知道连接查询是否正确。你觉得是吗?
      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 2013-12-01
      • 2021-02-20
      • 2015-09-23
      • 2019-07-01
      • 1970-01-01
      • 2012-08-21
      • 2017-04-29
      相关资源
      最近更新 更多