首页 > 解决方案 > 在 MySQL 中满足特定条件时如何排除行

问题描述

我有两个数据表。一张表包含参与者(Participants)的信息。以及一个包含事件所有注册的表(Registrars)。

+----+-------+
| id | name  |
+----+-------+
| 1  | Peter |
+----+-------+
| 2  | John  |
+----+-------+

+-----------+----------+
| person_id | event_id |
+-----------+----------+
| 1         | 1        |
+-----------+----------+
| 2         | 2        |
+-----------+----------+
| 2         | 1        |
+-----------+----------+

我运行 MySQL 查询以获取事件注册商的信息。查询如下所示:

SELECT name
    FROM Participants
        INNER JOIN Registrars 
            ON Participants.id=Registrars.person_id
    WHERE 
        event_id = 1

现在我想构建一个查询,如果参与者也注册了事件 2,它将不会在查询结果中返回 reg。如何在一个查询中实现这一目标?

标签: mysqlsqldatabase

解决方案


SELECT name
FROM Participants as p
    INNER JOIN Registrars as reg
        ON P.id=Reg.person_id
WHERE 
    reg.event_id = 1
 and not exists (select 1 from Registrars as strr where strr.event_id=2 and p.id=strr.person_id  )

推荐阅读