1

データベースには一連の予約があり、すべての予約には複数のセッションの1つのシーケンスがあります。すべてのセッションには、DateTimeを含む「停止」があります。

2つの日付の間にすべてのセッションが終了した予約を選択したいと思います。

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

ありがとう、正確なクエリは次のようになります。

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 に答える