Mysql SQL减号查询

时间:2014-06-09 17:33:26

标签: mysql sql

我想检查一个预订ID = 2和booking_state = PENDING,如果有相同的boat_id和相同日期的另一个预订PENDING。我唯一的问题是我想在最终结果中排除booking_id = 2.

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);

2 个答案:

答案 0 :(得分:1)

您不清楚要返回的结果集。

查询返回b1.id(作为SELECT列表中的列引用),查询中的谓词指定b1.id = 2,因此如果查询返回任何行,那么它就是&#39; s将成为2的值。

也许你的意思是返回b2.id,&#34;匹配&#34;行的ID id = 2。

或许,您可能需要指定b2.id = 2而不是b1.id = 2

编写问题的方式,无法知道您期望的结果集。

答案 1 :(得分:0)

我在@ spencer7593的帮助下得到了它:

关键是选择b2.id而不是b1.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)