mysql:如果表B中不存在,则从表A中选择所有项目

m1k*_*3y3 14 mysql select not-exists

我在选择表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')

表a包含多个房间,表b包含房间事件我没有得到结果,以防时间戳内的任何房间有任何事件.我期待所有房间都没有活动.

Sar*_*raz 26

这是您想要做的原型:

SELECT * FROM table1 t1
  WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id)
Run Code Online (Sandbox Code Playgroud)

这里,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')
          )
Run Code Online (Sandbox Code Playgroud)

如果需要,可以通过在mysql客户端中执行查询来检查查询的各个部分.例如,您可以确保以下内容是否返回任何记录:

SELECT * FROM room_events 
    WHERE room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200'
Run Code Online (Sandbox Code Playgroud)

如果没有,你找到了罪魁祸首并采取相应的行动与其他部分:)