首页 > 解决方案 > MySQL - 从 TABLE_1 中选择全部,其中 TABLE_2 的两个字段中不存在 id

问题描述

假设我有一张members桌子和一张swipes桌子。swipes表有两个字段swp_byswp_to。我想从成员表中选择和mem_id中不存在的所有行。我有一个小提琴设置。在小提琴中,请看到当前查询显示了两条记录。但事实并非如此。结果应该只有here 而不是。该表由两条记录组成。在第一条记录中,两者都没有用户 1。因此,只应选择此记录,而应丢弃第二个记录。swp_byswp_tomem_id 811swipesswp_byswp_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

标签: mysqlsql

解决方案


检查中的不匹配行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 |

推荐阅读