我在从表 a (id, room_name) 中选择值时遇到问题,其中表 b (room_id, room_start, room_finish) 中没有相应的事件
我的查询如下所示
SELECT id, room_name FROM rooms WHERE NOT EXISTS (SELECT * FROM room_events WHERE room_start BETWEEN '1294727400' AND '1294729200' OR room_finish BETWEEN '1294727400' AND '1294729200')
table a 包含多个房间,table b 包含房间事件 如果时间戳内的任何房间发生任何事件,我不会得到任何结果。我希望所有房间都没有事件。
最佳答案
这是你想要做的事情的原型(prototype):
SELECT * FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id)
此处,id
被假定为两个表中的 PK 和 FK。你应该相应地调整。另请注意,在这种情况下比较 PK 和 FK 很重要。
因此,您的查询应如下所示:
SELECT id, room_name FROM rooms r
WHERE NOT EXISTS
(SELECT * FROM room_events re
WHERE
r.room_id = re.room_id
AND
(
room_start BETWEEN '1294727400' AND '1294729200'
OR
room_finish BETWEEN '1294727400' AND '1294729200')
)
如果需要,您可以通过在 mysql 客户端中执行来检查查询的各个部分。例如,您可以确定以下是否返回任何记录:
SELECT * FROM room_events
WHERE room_start BETWEEN '1294727400' AND '1294729200'
OR
room_finish BETWEEN '1294727400' AND '1294729200'
如果不是,那么您已经找到了罪魁祸首,并对其他部分采取了相应的行动:)
关于mysql:如果表B中不存在,则从表A中选择所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660871/