【问题标题】:Rails + SQL: include join table when no joinRails + SQL:在没有连接时包含连接表
【发布时间】:2016-03-01 17:53:12
【问题描述】:

我有一个模型 Service,它可以选择属于一个区域。我正在尝试编写一个关于服务的查询,使我能够按区域标题和服务标题查询服务。

我已经设法通过以下查询做到了:

 Service.includes(:region).joins(:region).order(Region.arel_table[:title])

但它不包括不属于某个地区的服务。我希望查询还包括那些不属于某个区域的查询。在下一个查询中,我离得更近了:

 Service.where("region_id is null") + Service.includes(:region).joins(:region).order(Region.arel_table[:title])

但是……

  1. 这感觉又笨又可怕
  2. 我需要它返回一个 ActiveRecord::数组
  3. 奖金:在阿雷尔。

如何实现包含具有关联和不具有关联的记录的查询。

谢谢

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-4 arel


    【解决方案1】:

    这个我没试过,但是你可以在join中指定join sql。所以可能是这样的:

    Service.includes(:region).joins("LEFT JOIN regions on services.region_id = regions.id").order(Region.arel_table[:title])
    

    【讨论】:

    • 感谢@doon,虽然稍作调整,但效果很好。复数表名:Service.includes(:region).joins("LEFT JOIN region on services.region_id = region.id")
    • 我在答案中也将它们复数化了,这也是我从头脑中得到的结果,哈哈
    • 好东西!你能把我链接到关于左连接的任何有价值的信息吗?
    • 任何标准的 SQL 文档都应该涵盖它们。还要看看内连接和外连接之间的区别。 (不确定我 20 多年前从 c j date 的一本书中学习 SQL 的良好链接)
    猜你喜欢
    • 2011-06-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多