首页 > 解决方案 > 如何选择数据透视表中没有与 X id 相关的条目的位置

问题描述

在我的数据库中,我有一个通知类型表,如下所示:

+----+---------+
| id | type    |
+----+---------+
|  1 | live    |
|  2 | warning |
+----+---------+

事件表:

+----+---------------+--------------------+
| id | name          | description        |
+----+---------------+--------------------+
|  1 | My event      | Hello              |
|  2 | Other Event   | I'm an event!      |
+----+---------------+--------------------+

还有一个数据透视表 event_called_notifications 来跟踪每个事件已经调用了哪种类型的通知:

+----+----------+----------------------+
| id | event_id | notification_type_id |
+----+----------+----------------------+
| 22 |        1 |                    1 |
| 23 |        2 |                    1 |
+----+----------+----------------------+

我想选择所有没有称为特定类型通知的事件,没有与 X 相关的枢轴的 IE 条目

标签: mysqlsql

解决方案


一种选择是使用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>);

推荐阅读