gpt4 book ai didi

mysql - 查询以查找 2 个表/查询之间不存在的链接

转载 作者:行者123 更新时间:2023-11-29 07:59:49 24 4
gpt4 key购买 nike

我有3张 table

USERS
user_id

ALERTS
alert_id

USER_ALERTS
user_id
alert_id
show_alert

我需要找出哪些用户未链接到哪些警报。
因此对于以下数据:

用户

user_id
--------
1
2

警报

alert_id
--------
9
8
7

USER_ALERTS

user_id alert_id
------- --------
1 9
2 9
1 8
2 8
1 7

查询应该返回

user_id alert_id
------- --------
2 7

我可以通过连接 2 个表来找到未链接到任何用户的警报:

select a.alert_id, ua.alert_id, ua.user_id from alerts a 
left join
user_alerts ua
on a.alert_id = ua.alert_id
where u.alert_id is null;

但我似乎无法返回未链接的用户和警报 - 我需要使用缺失的行更新链接表。

我可以连接所有 3 个表(几乎返回 user_alerts 行):

SELECT u.user_id, ua.alert_id FROM user u 
LEFT OUTER JOIN user_alerts ua on u.user_id = ua.user_id
LEFT OUTER JOIN alerts a on a.alert_id = ua.alert_id;

我可以尝试笛卡尔积方法 - 将所有用户与所有警报结合起来

 SELECT u.user_id, a.alert_id from user u, alerts a

获取所有当前用户的警报

 SELECT ua.user_id, ua.alert_id from user_alerts ua

现在我需要第一个查询中第二个查询中没有的所有值,但不确定如何从这里到达那里。

有人有什么想法吗?

我正在使用 mySQL

最佳答案

您关于笛卡尔积的想法是正确的。它可以通过无条件加入usersalerts来实现。查找缺少哪对只需使用 left join

进行过滤
select a.*
from (
select user_id, alert_id
from users
join alerts) a
left join user_alerts b on a.user_id = b.user_id and a.alert_id = b.alert_id
where b.user_id is null;

演示:http://sqlfiddle.com/#!2/eb803/2

关于mysql - 查询以查找 2 个表/查询之间不存在的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com