mysql - 在 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。如何在一个查询中实现这一目标?
解决方案
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 )
推荐阅读
- python - 不区分大小写的正则表达式字典字符串替换中的“键错误”
- database - 如何更新 azerothcore-wotlk docker 容器
- python - 跨子模块记录——如何从子模块访问父记录器名称?
- xslt - xslt 彩色文本输出
- android - 没有使用 post 方法从 php Api 获取数据
- c# - Xamarin.Forms - 从主页查看缺少的菜单
- java - tomcat 不支持的major.minor 52.0版
- javascript - 仅适用于 Chrome 的脚本(不适用于 FF、Safari)
- javascript - A-Frame 鼠标组件未在移动设备上发布
- elasticsearch - ElasticSearch 将文本转换为小写