Rails:OUTER JOIN with condition

时间:2012-11-05 22:45:02

标签: sql ruby-on-rails

我有2个型号显示和预订。一个节目有很多预订。每个预订都有一个start_date和end_date。我想找到i)没有预订或ii)预订不与时间间隔[开始,结束]重叠的节目。到目前为止,我有:

Show.joins("LEFT JOIN bookings ON bookings.show_id = shows.id").where("bookings.start_date > ? OR bookings.end_date < ?, end, start)

但它没有返回没有预订的节目。如何在查询结果中包含没有预订的节目?

1 个答案:

答案 0 :(得分:3)

试试这个:

Show.joins("LEFT JOIN bookings ON bookings.show_id = shows.id").where("bookings.id IS NULL OR bookings.start_date > ? OR bookings.end_date < ?", end, start)