【问题标题】:How to make a simple join with query in rails如何在 Rails 中使用查询进行简单连接
【发布时间】:2013-01-28 05:35:07
【问题描述】:

我是 Rails 的新手,但我对 sql 有一些经验,所以现在我真的很难用 Rails 语法做一个简单的事情。

所以,有两个表:

class WorkshopMetadata < ActiveRecord::Base
  attr_accessible :uuid, :action
  belongs_to :workshop
end

class Workshop < ActiveRecord::Base
  has_many :workshop_metadatas
end

而我想做的查询是:

SELECT workshops.*
FROM workshops LEFT JOIN
(SELECT workshop_metadatas.workshop_id as id, workshop_metadatas.uuid 
        FROM workshop_metadatas WHERE uuid = 'smth') as metadatas
WHERE uuid IS NULL

我知道要进行左连接,您必须使用包含,但是我如何包含查询,而不是表?我对此完全感到困惑。

谢谢!

附:在我们研究的同时,是否有任何好的和全面的 Rails 文档?例如,列出包含方法的所有可用参数的那个。

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    我建议通读the ActiveRecord query interface guide - 它有点冗长,但它有很多很棒的指针!对于详尽的 API 参考,我通常会将您指向 http://api.rubyonrails.org/,但对于 ActiveRecord::QueryMethods 来说,它非常简单:(该指南是最好的选择...

    让我重新表述您的查询以确保我的查询正确:您要选择所有没有元数据行的 uuid 为 smth 的研讨会?

    值得庆幸的是,rails 允许您下拉查询片段,因此您应该可以通过以下方式完成:

    Workshop.joins(
      'LEFT JOIN workshop_metadatas ON workshop_metadatas.workshop_id = workshops.id'
    ).where('uuid IS NULL')
    

    (在没有子查询的情况下,这不是表达同样的事情吗?如果不是:您应该能够将您的子查询传递给joins 调用)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多