Mysql 如何选择透视表中没有与X id相关的条目的位置

Mysql 如何选择透视表中没有与X id相关的条目的位置,mysql,sql,Mysql,Sql,在我的数据库中,我有一个通知类型表,看起来像: +----+---------+ | id | type | +----+---------+ | 1 | live | | 2 | warning | +----+---------+ 事件表: +----+---------------+--------------------+ | id | name | description | +----+---------------+--------

在我的数据库中,我有一个通知类型表,看起来像:

+----+---------+
| id | type    |
+----+---------+
|  1 | live    |
|  2 | warning |
+----+---------+
事件表:

+----+---------------+--------------------+
| id | name          | description        |
+----+---------------+--------------------+
|  1 | My event      | Hello              |
|  2 | Other Event   | I'm an event!      |
+----+---------------+--------------------+
以及一个称为通知的透视表事件,用于跟踪已为每个事件调用的通知类型:

+----+----------+----------------------+
| id | event_id | notification_type_id |
+----+----------+----------------------+
| 22 |        1 |                    1 |
| 23 |        2 |                    1 |
+----+----------+----------------------+
我想选择所有没有调用特定类型通知的事件,即没有与X相关的轴的条目。一个选项是使用NOT EXISTS和相关子查询,该子查询检查事件和通知的链接表中的行

SELECT *
       FROM events e
       WHERE NOT EXISTS (SELECT *
                                FROM event_called_notifications ecn
                                WHERE ecn.event_id = e.id
                                      AND ecn.notification_type_id = <your X goes here>);

谢谢,我刚刚找到了不存在的文档。我看到你在为事件和轴心命名,这是否比只说:“从不存在的事件中选择*从称为通知的事件中选择*从称为通知的事件中选择*从称为通知的事件中选择*通知的类型为通知id=1,而称为通知的事件id=events.id```@Pinkflufyllama:这对编写查询的人来说更有效;但是对于DBMS来说没有区别,两个查询都会产生相同的计划。