MySQL – SELECT all from TABLE_1 where id does not exist in two fields of TABLE_2.

假设我有一个 members 桌子和a swipes 表。swipes 表有两个字段 swp_byswp_to. 我想从成员表中选择所有行,其中包括 mem_id 不存在 swp_byswp_to. 我设置了一个fiddle。在fiddle中请看到,目前查询显示两个记录。但这不应该是这样的情况。结果应该是只与 mem_id 8 在这里而不是 11. 该 swipes 表由两条记录组成。在第一条记录中: swp_byswp_to 都没有用户1。因此,只有这条记录被选中,第二条记录被丢弃。

当前查询

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

演示. 或者用NOT EXISTS。

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 |

给TA打赏
共{{data.count}}人
人已打赏
未分类

Flutter TabBar高度图标

2022-9-8 1:06:36

未分类

为Wordpress页面上的PayPal按钮定制HTML、CSS格式。

2022-9-8 1:06:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索