2016-07-20 7 views
0

これはSQLで正確に実行できるかどうかわかりませんが、私は運がまったくないので、何か助けていただければ幸いです。SQL - table2の条件がテーブル2で動作する場合のテーブルの表示

私は2つのテーブル:「部屋」と「予約」を持っています。 「部屋」はホテルルームを示し、「予約」は予約です。例:左から右へ

、TABLE1、TABLE2と私の望ましい結果例えば

enter image description here

が、私は20と21 の間で、この場合は、2つの日付の間に利用可能なお部屋を一覧表示したいです部屋1は利用できません(2つの日付が予約されています)。ルーム2は利用できません(20は予約されています)ので、次のように記載してください:

私はいくつかLEFT JOIN、blablaを試して、正しい結果を得ていない。 NOT IN(date1、date2)の日付は、date1とdate2の間で予約しないでください。

私はあなたのご協力に感謝します。 ありがとう

+1

* FYI:それは予約語であるため、* 'Date'は、不良カラム名です


ここnot existsを使用して別の同様のオプションがあります。 – Andreas

答えて

0

これを行うにはいくつかの方法があります。キーはjoinon部分にwhere基準を移動さ

select t1.roomid, t1.door 
from table1 t1 
    left join table2 t2 on t1.roomid = t2.roomid 
     and t2.date >= '2016-08-20' and t2.date <= '2016-08-21' 
where t2.bookingid is null 

:ここouter join/nullアプローチです。

select roomid, door 
from table1 t1 
where not exists (
    select 1 
    from table2 t2 
    where t1.roomid = t2.roomid and 
      t2.date >= '2016-08-20' and 
      t2.date <= '2016-08-21' 
    ) 
+0

おかげでsgeddes!私はそれが動作するかどうかを今すぐ試してみてください。 – eloygperez

+0

本当に速い答え...私は5-10分でそれを試してみて、それが動作するかどうかを教えてください。今日はNOT EXISTSで試していましたが、それは私にとってはうまくいかなかった... – eloygperez

+0

オプション3:オプション2と似ていますが、 'not in'を使用しています。そして、それらのすべては 'between'を使って書くことができます。 ;-) – Andreas

関連する問題