当前位置: 首页 > 面试题库 >

Rails中的多个表联接

漆雕成弘
2023-03-14
问题内容

我如何将下面的MySQL查询写入Rails ActiveRecord

select
    A.*,
    B.* 
from
    raga_contest_applicants_songs AS A 
    join
        raga_contest_applicants AS B 
        ON B.contest_applicant_id = A.contest_applicant_id 
    join
        raga_contest_rounds AS C 
        ON C.contest_cat_id = B.contest_cat_id 
WHERE
    C.contest_cat_id = contest_cat_id 
GROUP BY
    C.contest_cat_id

我知道如何在两个表上编写联接;但是,我对如何在3个表上使用联接不是很有信心。


问题答案:

要重写您在问题中遇到的SQL查询,我认为它应该类似于以下内容(尽管我很难完全可视化您的模型关系,所以这有点猜测):

RagaContextApplicantsSong.
  joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat).
  group('raga_contest_rounds.contest_cat_id')

…这样该joins方法可以同时处理两个联接以及WHERE子句,最后是group调用。

作为更多参考:

如果要将多个关联加入同一模型,则可以简单地列出它们:

Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment

如果要加入嵌套表,则可以将它们列出为哈希表:

Post.joins(:comments => :guest)
Returns all comments made by a guest

嵌套关联,多个级别:

Category.joins(:posts => [{:comments => :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest

您还可以链接ActiveRecord查询接口调用,例如:

Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)

如果所有其他方法均失败,则始终可以将SQL片段直接传递到joins方法中,以此作为从工作查询到达以ARQI为中心的内容的垫脚石

   Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')
=> SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id


 类似资料:
  • 我是(My)SQL的新手,需要一些帮助:在数据库中,我有3个表,一个例子: 购买: 制造者: 型号: 在表purchases中,model是一个外键,它链接到model.id。在模型中,“制造商”是一个外键,它与“制造商id”相链接。 我的目标是一个如下图所示的表格: 我知道如何在表购买中加入以获取型号的名称。不幸的是,我不知道如何获取制造商? 我的SQL-查询:

  • 问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广

  • 问题内容: 我正在尝试找出SQLAlchemy中正确的联接查询设置,但似乎无法解决。 我有以下表格设置(简化后,我省略了非必要字段): 因此,关系如下: 1:n Group Member 1:n Member Item 1:n Version Item 我想通过从数据库中选择具有特定版本的所有项目行来构建查询。然后,我想按组然后按成员订购。使用Flask / WTForm的输出应如下所示: 我想出

  • 我想添加表示来自其他表的计数的列。 我有三张桌子。 消息 主题 STARS_GIVED 我想以: 主题回顾 所以基本上,我想附上3列唯一值的计数(每个主题中给出的星数,在主题中有消息的唯一用户,以及每个主题中唯一消息的数量)。 我希望最终能够对类别进行筛选(看看两列)。 此外,我希望最终按我加入的计数排序。例如,我将有一个按钮,按“星星的数目”按升序排序,或按“用户的数目”按降序排序,等等。 我试

  • 问题内容: 我有一个网站,该网站将选项存储在多个表中,并根据单个页面提取所有相关选项。此刻,我结束了这样的查询:。这确实不是一个坏问题,但是我必须逐个遍历每个选择结果。 我想将所有这些提取到单个网格中,然后执行类似的操作 如果使用类似的查询,则会结束所有可能的行组合(第一个foo第一栏,第二个foo第二栏,第二个foo第一栏,第二个foo第二栏等)。 有没有一种方法可以执行这样的选择,并且每个元素

  • 问题内容: 我有一个模型可以使用“使行为成为现实”宝石(Github页面)进行投票。投票系统工作正常,但我尝试显示按每个页面有多少排序的页面。 目前,我的控制器根据标签提取资源,但未排序: 如果我使用单个资源并调用“ @ resource.votes.size”,它将返回其拥有的票数。但是,票数是另一张桌子,因此我认为需要进行某种形式的合并,但我不确定如何进行。我需要的是一个可以这样显示的漂亮的有