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

标签 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')

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/

相关文章:

mysql - Laravel 5.0 查询使用带连接的查询构建器

sql - 甲骨文 |查询输出以分号分隔

sql - MS SQL Server 2012 - 如果行不存在则插入值

php - 如何生成随机id

php - 禁止直接访问某个页面

mysql - 从 SQL Server 到 MYSQL 插入文本字段失败

html - 选择元素上下拉框的大小

mysql - 如何选择 1 :n related records which are minimum 2 per type in MySQL

mysql - 如果不存在则不工作

php - 选择...不存在的地方