gpt4 book ai didi

mySQL 查询 2 表左连接

转载 作者:行者123 更新时间:2023-11-29 09:47:22 24 4
gpt4 key购买 nike

我有 2 个表 - 用户和结果

ID | UserID | League
1 | 123 | Great
2 | 124 | Great
3 | 125 | Great
4 | 123 | Ultra
5 | 124 | Ultra
6 | 126 | Ultra

ID | Winner | Loser | League
1 | 124 | 123 | Great
2 | 124 | 123 | Ultra
3 | 124 | 125 | Great

如果某个用户在用户表中有该联赛,我想选择之前未与某个用户进行过特定联赛的所有不同的 UserID。

所以如果我要为 126 Ultra 执行此操作,它应该返回 - 123,124123 伟大 - 125

到目前为止我已经

从 `User` t1 LEFT JOIN `Result` t2 ON 中选择不同的用户 ID (t1.UserID = t2.Winner OR t1.UserID = t2.Loser) WHERE UserID != 125 AND t1.League = 'Ultra ' 并且 t2.id 为空

我不确定我缺少什么,任何帮助将不胜感激。

最佳答案

要获得您想要的结果,您需要获取感兴趣联盟中所有用户的列表(不包括您正在搜索的用户),然后LEFT JOIN将其添加到结果表,仅选择没有匹配结果的行。然后,您将获得特定用户未在该联赛中玩过的用户列表。在 MariaDB 10.3 中,可以通过 CTE 来完成(此示例适用于用户 123 Great):

WITH Users AS
(SELECT DISTINCT UserID
FROM User
WHERE League = 'Great' AND UserID != 123)
SELECT UserID
FROM Users u
LEFT JOIN Result r ON r.League = 'Great'
AND ((r.Winner = u.UserID AND r.Loser = 123)
OR (r.Winner = 123 AND r.Loser = u.UserID)
)
WHERE r.ID IS NULL

输出:

UserID
125

演示(包括 126 Ultra 的结果)dbfiddle

关于mySQL 查询 2 表左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427393/

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