对于下表:凡在连接表子句
ROOM
+----+--------+
| ID | NAME |
+----+--------+
| 1 | ROOM_1 |
| 2 | ROOM_2 |
+----+--------+
ROOM_STATE
+----+---------+------+------------------------+
| ID | ROOM_ID | OPEN | DATE |
+----+---------+------+------------------------+
| 1 | 1 | 1 | 2000-01-01 00:00:00 |
| 2 | 2 | 1 | 2000-01-01 00:00:00 |
| 3 | 2 | 0 | 2000-01-06 00:00:00 |
+----+---------+------+------------------------+
存储的数据的客房与去年变化状态:
- ROOM_1开于2000-01-01 00:00:00
- ROOM_2在2000-01-01 00:00:00
- ROOM_2开于2000年1月6日00:00:00 关闭
ROOM_1仍然开放,ROOM_2已关闭(自2000-01-06开始不开放)。如何选择实际打开的房间名称加入?如果我写道:
SELECT ROOM.NAME
FROM ROOM
INNER JOIN ROOM_STATE ON ROOM.ID = ROOM_STATE.ROOM_ID
WHERE ROOM_STATE.OPEN = 1
ROOM_1和ROOM_2选择,因为ROOM_STATE
与ID
2
是OPEN
。
SQL小提琴:http://sqlfiddle.com/#!9/68e8bf/3/0
标签您与您正在使用的数据库的问题。 –
完成。它不能是纯粹的SQL答案? – bux
日期函数在SQL世界中通常是特定于供应商的。此外,有些产品不支持窗口化函数和/或通用表表达式,甚至不支持ANSI标准中的部分。如果你想要一个数据库不可知的答案,那么你可以特别要求一个,但它可能不如为你正在使用的特定数据库量身定制的那个最佳。 –