我有以下表格:MySQL查詢與左連接和時間條件
mysql> select * from room;
+----+----------+
| ID | NAME |
+----+----------+
| 1 | Room 101 |
| 2 | Room 102 |
| 3 | Room 103 |
+----+----------+
mysql> select * from booking;
+---------+---------------------+---------------------+----------------+
| ROOM_ID | START | END | GUEST |
+---------+---------------------+---------------------+----------------+
| 1 | 2016-04-01 00:00:00 | 2016-04-30 00:00:00 | Dorian Gray |
| 1 | 2016-05-03 00:00:00 | 2016-05-20 00:00:00 | Vanessa Ives |
| 1 | 2016-05-21 00:00:00 | 2016-05-30 00:00:00 | Ethan Chandler |
| 2 | 2016-05-06 00:00:00 | 2016-05-18 00:00:00 | John Clare |
+---------+---------------------+---------------------+----------------+
對於每一個房間,我想獲得有關其預訂狀態的附加信息。如果預訂,我想顯示預訂狀態。如果沒有預訂,則必須顯示NULL
。
如果我開始一個基本的查詢..
mysql> select * from room r, booking b where r.id = b.room_id;
+----+----------+---------+---------------------+---------------------+----------------+
| ID | NAME | ROOM_ID | START | END | GUEST |
+----+----------+---------+---------------------+---------------------+----------------+
| 1 | Room 101 | 1 | 2016-04-01 00:00:00 | 2016-04-30 00:00:00 | Dorian Gray |
| 1 | Room 101 | 1 | 2016-05-03 00:00:00 | 2016-05-20 00:00:00 | Vanessa Ives |
| 1 | Room 101 | 1 | 2016-05-21 00:00:00 | 2016-05-30 00:00:00 | Ethan Chandler |
| 2 | Room 102 | 2 | 2016-05-06 00:00:00 | 2016-05-18 00:00:00 | John Clare |
+----+----------+---------+---------------------+---------------------+----------------+
它工作正常,但是這不是我想要的..讓我們看看還剩加入...
mysql> select * from room r left join booking b on r.id = b.room_id;
+----+----------+---------+---------------------+---------------------+----------------+
| ID | NAME | ROOM_ID | START | END | GUEST |
+----+----------+---------+---------------------+---------------------+----------------+
| 1 | Room 101 | 1 | 2016-04-01 00:00:00 | 2016-04-30 00:00:00 | Dorian Gray |
| 1 | Room 101 | 1 | 2016-05-03 00:00:00 | 2016-05-20 00:00:00 | Vanessa Ives |
| 1 | Room 101 | 1 | 2016-05-21 00:00:00 | 2016-05-30 00:00:00 | Ethan Chandler |
| 2 | Room 102 | 2 | 2016-05-06 00:00:00 | 2016-05-18 00:00:00 | John Clare |
| 3 | Room 103 | NULL | NULL | NULL | NULL |
+----+----------+---------+---------------------+---------------------+----------------+
儘管如此,顯示重複的......讓我們嘗試與多個條件:
mysql> select * from room r left join booking b on r.id = b.room_id where b.start<now() and b.end>now();
+----+----------+---------+---------------------+---------------------+--------------+
| ID | NAME | ROOM_ID | START | END | GUEST |
+----+----------+---------+---------------------+---------------------+--------------+
| 1 | Room 101 | 1 | 2016-05-03 00:00:00 | 2016-05-20 00:00:00 | Vanessa Ives |
| 2 | Room 102 | 2 | 2016-05-06 00:00:00 | 2016-05-18 00:00:00 | John Clare |
+----+----------+---------+---------------------+---------------------+--------------+
好吧......但是錯了,因爲「103室」不顯示(這不是預訂).. 。
我希望得到的東西是這樣的:
+----+----------+---------+---------------------+---------------------+--------------+
| ID | NAME | ROOM_ID | START | END | GUEST |
+----+----------+---------+---------------------+---------------------+--------------+
| 1 | Room 101 | 1 | 2016-05-03 00:00:00 | 2016-05-20 00:00:00 | Vanessa Ives |
| 2 | Room 102 | 2 | 2016-05-06 00:00:00 | 2016-05-18 00:00:00 | John Clare |
| 3 | Room 103 | NULL | NULL | NULL | NULL |
+----+----------+---------+---------------------+---------------------+--------------+
任何想法?
有沒有sqlfiddle? – Strawberry
我剛剛創建了一個:) http://sqlfiddle.com/#!9/52b53 – hosselausso