2012-02-23 7 views
0

を確認してください。 Events.veuueVenuesへの外部キーです。私は時間範囲内のすべての利用可能な会場を選択したいと思います。 SQLはどのように見えますか?現時点では、私はそれを理解することが困難です...SQLは、私のようなテーブル構造を持っている利用可能な会場

+2

どのRDBMS?ご指定ください。 –

+0

@Shark、そのSQLiteですが、多かれ少なかれ自分自身を翻訳できるはずです –

答えて

2

Eventsから時間範囲を重複しない行を取得するには、NOT EXISTSが必要です。私は、これは仕事をすべきだと思う:

SELECT v.id, v.name 
FROM 
    Venues v 
WHERE NOT EXISTS (
    SELECT venue FROM Events e 
    WHERE [searchdate] BETWEEN start AND end 
    AND v.id = e.venue 
) 

上記は、単一の日時[searchdate]を使用しています。あなたは、のために会場をご確認のようWHERE句を使用する日付の開始/終了範囲が必要な場合:だから

WHERE 
    [searchstartdate] BETWEEN start AND end 
    OR [searchenddate] BETWEEN start AND end 

いずれか[searchstartdate]または[searchenddate]がイベントと重なる場合は、行が一致します。

0

これはMS SQLの場合です。

SELECT distinct Venues.id, Venues.Name 
FROM Venues 
INNER JOIN Events 
ON Venues.id = Events.venue 
WHERE @startdatetime between Events.start and Events.end 
OR @enddatetime between Events.start and Events.end 

EDIT 私はあなたの明確化を理解していれば、あなたは会場が検索日の間に落ちるされていない検索する必要があります。

SELECT distinct Venues.id, Venues.Name 
FROM Venues 
INNER JOIN Events 
ON Venues.id = Events.venue 
WHERE @searchdatetime not between Events.start and Events.end 
+0

これは、特定の開始日時と終了日時の間に会場で起こっているイベントをチェックしていると思います。私はそれとは逆のことが必要だと思う。指定された日時の間にイベントが発生しない場所 –

+0

イベントは '@ startdatetime'の後に開始し、' @enddatetime'の前に終了するケースを考慮していません。 –

関連する問題