mysql - MySQL - 从 TABLE_1 中选择全部,其中 TABLE_2 的两个字段中不存在 id
问题描述
假设我有一张members
桌子和一张swipes
桌子。swipes
表有两个字段swp_by
和swp_to
。我想从成员表中选择和mem_id
中不存在的所有行。我有一个小提琴设置。在小提琴中,请看到当前查询显示了两条记录。但事实并非如此。结果应该只有here 而不是。该表由两条记录组成。在第一条记录中,两者都没有用户 1。因此,只应选择此记录,而应丢弃第二个记录。swp_by
swp_to
mem_id
8
11
swipes
swp_by
swp_to
当前查询
SELECT * FROM members
LEFT JOIN swipes ON ((swipes.swp_by = members.mem_id OR swipes.swp_to = members.mem_id))
WHERE swipes.swp_by != 1 AND swipes.swp_to != 1
小提琴在这里:DB FIDDLE
解决方案
检查中的不匹配行LEFT JOIN
:
SELECT members.*
FROM members LEFT JOIN swipes
ON (swipes.swp_by = members.mem_id OR swipes.swp_to = members.mem_id)
AND (swipes.swp_by = 1 OR swipes.swp_to = 1)
WHERE COALESCE(swipes.swp_by, swipes.swp_to) IS NULL
请参阅演示。
或者不存在:
SELECT m.*
FROM members m
WHERE NOT EXISTS (
SELECT 1 FROM swipes
WHERE m.mem_id IN (swp_by, swp_to) AND 1 IN (swp_by, swp_to)
)
请参阅演示。
结果:
| mem_id | mem_fname | mem_lname | mem_last_activity |
| ------ | --------- | --------- | ------------------- |
| 8 | Priyanka | Jaiswal | 2020-04-14 23:25:00 |
推荐阅读
- python - Groupby 和 cumcount 仅适用于有效行
- python - 获取文件中出现单词的行?
- authentication - 是否可以通过检查 Kerberos 数据包来确定用户如何进行身份验证?
- c++ - 在字符串中插入一个字符
- azure - Azure 应用服务:如果当前实例计数高于所选实例怎么办?
- c++ - 在函数体中静态定义的互斥锁是否能够正确锁定?
- javascript - JQuery 中的 Ajax 未执行
- cmake - cmake RPATH 仅适用于第一个依赖项
- amazon-web-services - AWS 将多行日志文件从 CloudWatch 流式传输到 ELK
- macos - macOS 键盘快捷键使用什么字形/字体?