gpt4 book ai didi

sql - 多对多自引用选择sql查询

转载 作者:可可西里 更新时间:2023-11-01 07:57:33 24 4
gpt4 key购买 nike

我为两个用户之间的关系设置了一个简单的表 (MySQL)。

 [User1Id] [User2Id]
10 15
14 10
10 13

但是,我不知道如何执行 SELECT,以便我可以获取被请求用户的相反 UserId。因此,如果我想获取 ID 为 10 的用户的所有关系,它将获取用户 ID 15、14 和 13,并且理想情况下将这些 ID 加入用户表以获取这些用户的用户名。我目前的尝试不太理想:

 SELECT u1.username AS U1Username, 
u2.username AS U2Username,
u1.userId AS U1UserId,
u2.userId AS U2UserId
FROM buddies b
LEFT JOIN users u1 on u1.userId=b.user2Id
LEFT JOIN users u2 on u2.userId=b.user1Id
WHERE b.user1Id=:1 OR b.user2Id=:1

然后在代码中进行过滤和重新排列。有没有一种方法可以让我执行一个 SQL 查询来获取我需要的一切?

最佳答案

使用:

SELECT u.userid,
u.username
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM BUDDIES b
WHERE u.userid = b.user1id
AND b.user2id = 10)
OR EXISTS(SELECT NULL
FROM BUDDIES b
WHERE u.userid = b.user2id
AND b.user1id = 10)

...或者:

SELECT a.user1id,
u.username
FROM BUDDIES a
JOIN USERS u ON u.userid = a.user1id
WHERE a.user2id = 10
UNION
SELECT b.user2id,
u.username
FROM BUDDIES b
JOIN USERS u ON u.userid = b.user2id
WHERE b.user1id = 10

UNION 将删除重复项; UNION ALL删除重复项并且速度更快。

关于sql - 多对多自引用选择sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4037772/

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