5 sql
我有两张桌子,一张用于开口,另一张用于预订.预订表中的条目总是指开口,每个开口可能有多个预订.我想提取所有预订不同的开口bookingType 'C'.
例如
如果一个开口有3个A,B和C类型的预订,它不应该出现在结果中
如果开口只有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竟是通过两列定义的时间间隔arrivalDate和departureDate:在上面,我需要所有不具有之间的预订开口的例子20th June 2009和27th June 2009.
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)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |