1

我们的数据库中有一系列预订,每个预订都有一个序列的多个会话。每个会话都有一个包含日期时间的“停止”。

我想选择所有会话都在两个日期之间结束的预订。

SELECT DISTINCT b.*
  FROM Booking as b
    JOIN Sequence as se
    JOIN Session as s
ON (b.sequence_id=se.id AND s.sequence_id=se.id
    AND s.stop between '2012-09-01 00:00:00' AND '2012-12-01 00:00:00');

此 SQL 选择包含 1 个或多个已结束会话的预订。

我只想要所有会话都结束的预订。

有任何想法吗?

4

2 回答 2

2

thanx,确切的查询是这样的:

SELECT b.id, s.stop  
  FROM Booking as b  
  JOIN Sequence as se  
  JOIN Session as s  
     ON (b.sequence_id=se.id AND s.sequence_id=se.id)  
        where not exists (SELECT ss.id from Session as ss where ss.sequence_id=se.id and ss.stop < '2012-09-01 00:00:00')  
        and not exists (SELECT ss.id from Session as ss where ss.sequence_id=se.id and ss.stop > '2012-12-01 00:00:00'); 
于 2012-12-06T14:56:11.237 回答
1

我想知道你是否可以这样做:

SELECT DISTINCT b.*  
  FROM Booking as b  
  JOIN Sequence as se  
  JOIN Session as s  
     ON (b.sequence_id=se.id AND s.sequence_id=se.id )  
  where s.stop between '2012-09-01 00:00:00' AND '2012-12-01 00:00:00')  
     and not exists ( s.stop < '2012-09-01 00:00:00' )  
     and not exists ( s.stop > '2012-12-01 00:00:00');  

虽然语法不太正确。

于 2012-12-06T14:44:12.773 回答