我有2张桌子:约会和门。门有一个预约和约会属于一个门。约会表有door_id。
我写的查询是:
scope :not_in_appointments, -> { joins("left outer join appointments on appointments.door_id = doors.id") }
问题:范围仍在返回约会表中的门。
目标:我们希望获得不在约会表中的大门。
左外连接假设是这样做的。有人可以告诉我们为什么这个查询不起作用吗?
感谢。
答案 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)") }
性能远远优于使用左外连接'因为我们正在尽快减少冗余记录的数量。