6

テーブルから利用可能な部屋を取得するための SQL の記述に問題があります。私のテーブル構造を以下に示します。

表 : 予約

booking_id    |    room_id   |    start_datetime  |   end_datetime    |   customer_id
-------------------------------------------------------------------------------------
001           |     1        |  12-09-2012 2:35pm | 14-09-2012 9:00am |    23
002           |     2        | 10-09-2012 1:00am  | 20-09-2012 9:00am |    20
003           |     4        |  09-09-2012 1:35pm | 21-09-2012 9:00am |    43
004           |     1        |  22-09-2012 2:35pm | 24-09-2012 9:00am |    9
005           |     3        |  12-09-2012 9:00am | 13-09-2012 9:00am |    53
006           |     6        |  15-09-2012 9:00am | 19-09-2012 9:00am |    27

表 : 部屋

部屋に関する詳細が含まれており、テーブルの主キーは room_id で、1 から 10 までの 10 の部屋があります。

私の問題は、部屋が 2012 年 9 月 14 日午後 6 時から 2012 年 9 月 21 日午前 9 時まで空いていることを知りたいということです。 、9、10。

上記のテーブル構造から利用可能な部屋を取得するための SQL を書くのを誰か手伝ってくれませんか? データベースエンジンとしてmysqlを使用しています。前もって感謝します。

4

1 に答える 1

12

これでうまくいくはずです。希望する予約より前に終了または後に開始されない予約がある場合、その部屋は混雑していると見なされます。

SELECT r.room_id
FROM rooms r
WHERE r.room_id NOT IN (
    SELECT b.room_id FROM bookings b
    WHERE NOT (b.end_datetime   < '2012-09-14T18:00'
               OR
               b.start_datetime > '2012-09-21T09:00'))
ORDER BY r.room_id;

ここで SQLFiddle

于 2012-09-14T06:11:49.867 に答える