首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询-我哪里出错了?

SQL查询-我哪里出错了?
EN

Stack Overflow用户
提问于 2009-06-12 12:04:35
回答 4查看 280关注 0票数 5

我有两张桌子,一张是空位的,另一张是预订的。“预订”表中的条目总是指一个开口,每个开口可能有多个预订。我想提取所有的空缺,有不同的预订与bookingType 'C'

等。

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

中。

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

代码语言:javascript
复制
select op.id, bo.id 
  from opening op
  left join booking bo on bo.openingId = op.id
  where bo.bookingType != 'C';

以下是引用时间间隔的完整查询:

代码语言:javascript
复制
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')) 

我过去所称的bookingType实际上是通过arrivalDatedepartureDate两列定义的时间间隔:在上面的示例中,我需要在20th June 200927th June 2009之间没有预约的所有空缺。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-12 12:21:19

代码语言:javascript
复制
SELECT op.id 
FROM opening op 
WHERE op.id NOT IN 
     (SELECT b.openingid 
      FROM booking b 
      WHERE b.bookingtype='C')

随着日期的改变:

代码语言:javascript
复制
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')
     )
票数 7
EN

Stack Overflow用户

发布于 2009-06-12 12:22:18

这里有一个没有联接的简单版本,您甚至不需要打开表:

代码语言:javascript
复制
select openingId, id
from booking
where openingId not in (
    select openingId
    from booking
    where bookingType = 'C'
)
票数 2
EN

Stack Overflow用户

发布于 2009-06-12 14:11:39

@Frankie -不需要使用非IN条款。您也可以使用左反半连接,例如:

代码语言:javascript
复制
SELECT op.id 
FROM opening op 
LEFT OUTER JOIN booking b ON op.id = b.openingid AND b.bookingtype = 'C'
WHERE b.OpeningID IS NULL

这是:

代码语言:javascript
复制
SELECT op.id 
FROM opening op 
LEFT OUTER JOIN booking b ON op.id = b.OpeningID
 AND b.ArrivalDate BETWEEN '2009/06/20' AND '2009/06/27'  
 AND b.DepartureDate BETWEEN '2009/06/20' AND '2009/06/27'
WHERE b.OpeningID IS NULL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/986286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档