【问题标题】:Rails 4 left outer join issue returning wrong recordsRails 4左外连接问题返回错误记录
【发布时间】:2015-12-07 23:38:39
【问题描述】:

我有 2 张桌子:约会和门。门有一个约会,约会属于一个门。约会表有 door_id。

我写的查询是:

scope :not_in_appointments, -> { joins("left outer join appointments on appointments.door_id = doors.id") }

问题:范围仍在返回约会表中的门。

目标:我们希望获得不在约会表中的门。

左外连接应该是这样做的。有人可以告诉我们为什么这个查询不起作用吗?

谢谢。

【问题讨论】:

  • 你错了,左外连接不应该这样做。左外连接返回匹配的记录以及与右侧表不匹配的记录。为了得到你想要的,你需要左外连接,然后过滤掉匹配,例如,通过过滤那些连接键为空的。

标签: sql ruby-on-rails postgresql join scope


【解决方案1】:

这同样适用,在作用域中添加一个额外的 where 子句:

scope :not_in_appointments, -> { joins("left outer join appointments on appointments.door_id = doors.id").where("appointments.id IS NULL") }

【讨论】:

    【解决方案2】:

    试试这个

    scope :not_in_appointments, -> { where("id NOT IN (SELECT door_id FROM appointments)") }
    

    性能比使用“左外连接”要好得多,因为我们正在尽快减少冗余记录的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2023-03-07
      • 2014-08-13
      • 2019-07-14
      • 1970-01-01
      • 2011-07-11
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多