2012-11-05 50 views
1

我有2款車型顯示和預訂。一個節目有很多預訂。每個預訂都有一個start_date和end_date。我想要找到這樣的節目:i)沒有預訂,或者ii)預訂與時間間隔[開始,結束]不重疊。到目前爲止,我有:Rails:有條件的OUTER JOIN

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

但它不返回沒有預訂的節目。如何在查詢結果中包含沒有預訂的節目?

回答

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) 
+0

這一工程!還有一個問題,如果我有多個節目的預訂不與查詢間隔重疊,則LEFT JOIN將返回重複的行。有沒有辦法擺脫重複? –

+0

明白了。我可以使用「GROUP BY boats.id」 –