SQL查询 - 我哪里错了?

5 sql

我有两张桌子,一张用于开口,另一张用于预订.预订表中的条目总是指开口,每个开口可能有多个预订.我想提取所有预订不同的开口bookingType 'C'.

例如

  1. 如果一个开口有3个A,B和C类型的预订,它不应该出现在结果中

  2. 如果开口只有A和B类型的预订,它应该显示在结果中

以下是我尝试过的但是它不正确,因为它失败了示例1:

select op.id, bo.id 
  from opening op
  left join booking bo on bo.openingId = op.id
  where bo.bookingType != 'C';
Run Code Online (Sandbox Code Playgroud)

以下是涉及时间间隔的完整查询:

select op.id, bo.id 
  from opening op
  left join booking bo on bo.openingId = op.id
  where ((bo.arrivalDate < '2009/06/20' AND bo.departureDate <= '2009/06/20') OR 
         (bo.arrivalDate >= '2009/06/27' AND bo.departureDate > '2009/06/27')) 
Run Code Online (Sandbox Code Playgroud)

我习惯叫bookingType竟是通过两列定义的时间间隔arrivalDatedepartureDate:在上面,我需要所有不具有之间的预订开口的例子20th June 200927th June 2009.

akf*_*akf 7

SELECT op.id 
FROM opening op 
WHERE op.id NOT IN 
     (SELECT b.openingid 
      FROM booking b 
      WHERE b.bookingtype='C')
Run Code Online (Sandbox Code Playgroud)

随着日期的变化:

SELECT op.id 
FROM opening op 
WHERE op.id NOT IN 
     (SELECT b.openingid 
      FROM booking b 
      WHERE (b.arrivalDate BETWEEN '2009/06/20' AND '2009/06/27') 
             OR 
            (b.departureDate BETWEEN  '2009/06/20' and '2009/06/27')
     )
Run Code Online (Sandbox Code Playgroud)