2014-06-09 63 views
0

我想檢查一個預訂ID = 2和booking_state = PENDING,如果有另一個預訂PENDING爲相同的boat_id和相同的日期。我唯一的問題是我想排除我的最終結果中的booking_id = 2。Mysql SQL減號查詢

SELECT distinct b1.id 
FROM bookings b1, bookings b2, booking_states bs 
WHERE bs.name = 'Pending' 
AND b1.id = 2 
AND b1.id <> b2.id 
AND bs.id = b1.booking_state_id 
AND bs.id = b2.booking_state_id 
AND b1.boat_id = b2.boat_id 
AND (date(b1.departure_date) <= b2.departure_date AND date(b1.arrival_date) >= b2.departure_date) 
OR (date(b1.departure_date) <= b2.arrival_date AND date(b1.arrival_date) >= b2.arrival_date); 
+0

您可以發佈來自每個表的小行樣本,以及您希望查詢輸出看起來像什麼樣本?如果可能,請在http://sqlfiddle.com上設置 –

回答

0

我@ spencer7593的幫助下得到了它:

的關鍵是選擇,而不是b1.id

這是最終的查詢b2.id:

SELECT distinct b2.* 
FROM bookings b1, bookings b2, booking_states bs 
WHERE bs.name = 'Pending' 
AND b1.id = 2 
AND b1.id <> b2.id 
AND bs.id = b1.booking_state_id 
AND bs.id = b2.booking_state_id 
AND b1.boat_id = b2.boat_id 
AND (date(b1.departure_date) <= b2.departure_date AND date(b1.arrival_date) >= b2.departure_date) 
OR (date(b1.departure_date) <= b2.arrival_date AND date(b1.arrival_date) >= b2.arrival_date) 
AND NOT EXISTS (SELECT 1 
FROM bookings b 
WHERE b1.id <> b.id) 
1

你不清楚你想返回什麼結果集。

該查詢返回b1.id(如在SELECT列表中的列的參考),並在查詢謂詞指定b1.id = 2,因此,如果查詢返回任何行,這將是2

的值

也許你想回b2.id,該「匹配」的行的ID = 2

或者,也許你的意思是指定b2.id = 2而非b1.id = 2

你的問題寫的方式,不可能知道你期待的結果集。