1

2 つのテーブルを備えた単純な教室予約システムがあります。

部屋 :

 1. id
 2. name
 3. localisation

カレンダー :

 1. id
 2. idroom
 3. year
 4. month
 5. days

days は 31 文字の文字列です (1 日ごとに 1 文字)。文字は次のとおりです。「0」は無料です。「1」は第 1 段階の予約です。占領中の「3」

カレンダーは必要に応じて作成されるので、私の問題は、空いている教室を求めて、確認した期間のカレンダーエントリがない教室を取得することです。たとえば、classroom1 は 2013 年 12 月 1 日から 2013 年 3 月 2 日まで占有されており、この教室のカレンダー テーブルにはもうエントリがありません。また、2013 年 1 月 12 日から 2013 年 4 月 12 日まで予約を依頼した場合、結果に教室 1 を含める方法がわかりません。月は null で、年も指定できます。左結合を試みましたが、「null です」が成功しませんでした。

これは私のリクエストの最初の部分です。これは機能しますが、その期間の「カレンダーのない部屋」は表示されません。

SELECT DISTINCT room.id
FROM room LEFT JOIN
     calendar
     ON room.id=calendar.idroom
WHERE (calendar.year=2013 AND calendar.month=12 and calendar.days like "0000%") 

ご協力ありがとうございました。

4

1 に答える 1

0

問題は、where句がcalendarテーブルを使用しているため、left join. onこれは、ロジックを句に混在させることで修正できます。

SELECT DISTINCT room.id
FROM room LEFT JOIN
     calendar
     ON room.id=calendar.idroom and
        (calendar.year=2013 AND calendar.month=12 and calendar.days like "0000%") 
于 2013-04-17T15:10:25.473 に答える