Rails 4左外连接问题返回错误记录

时间:2015-12-07 23:38:40

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

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

我写的查询是:

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

这样可以正常工作,在范围中添加一个额外的where子句:

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

答案 1 :(得分:0)

试试这个

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

性能远远优于使用左外连接'因为我们正在尽快减少冗余记录的数量。