我有2个名为user和的表userFriend.我希望用户表中的所有用户和userFriend表中的特定成员.然后我想加入他们两个......
user
userID userName
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
userFriend
userFriendID userID friendUserID
1 1 2
2 2 3
3 1 4
4 4 2
Run Code Online (Sandbox Code Playgroud)
所以,如果我的userID = 1,那么我想要结果
userID userName userFriendID friendUserID
2 bbb 1 2
3 ccc NULL NULL
4 ddd 3 4
5 eee NULL NULL
Run Code Online (Sandbox Code Playgroud)
所以这样我想要第二个表的条件,我只想加入第二个表,其中userID = 1,第一个表使用左连接.
这是一个非常规的要求......但这会给你想要的结果。
SELECT u.userID, u.userName, uf.userFriendID, uf.friendUserID
FROM user u
LEFT JOIN userFriend uf ON u.userID = uf.friendUserID AND uf.userID =1
WHERE u.userID !=1
Run Code Online (Sandbox Code Playgroud)
对于您想要的内容,您不需要从两个表中进行查询。只需使用 userFriend 即可为您提供数据。您只需要用户表来存储名称。
SELECT DISTINCT userID FROM userFriend
WHERE friendUserID = ?
Run Code Online (Sandbox Code Playgroud)
这将为您提供拥有您需要的特定朋友的所有用户。您可以选择添加 INNER JOIN 来查看名称:
SELECT DISTINCT f.userID, u.name
FROM userFriend f
INNER JOIN users u ON u.userID = f.userID
WHERE friendUserID = ?
Run Code Online (Sandbox Code Playgroud)
更新 关于您的结构的评论。您不需要 userFriendID。用户 ID 和好友 ID 的组合可以作为您的密钥。
查询的更新
SELECT * FROM users u
LEFT JOIN userFriend f on u.userID = f.userID
WHERE f.friendUserID = ?
Run Code Online (Sandbox Code Playgroud)
这将返回所有拥有朋友 X 的用户。左连接在此查询中并不重要。这种特定条件使其无关紧要。
为了得到你想要的,你需要执行这个。
SELECT * FROM users u
LEFT JOIN (
SELECT DISTINCT * FROM userFriend f
WHERE friendID = 4
) x ON u.id = x.userId
Run Code Online (Sandbox Code Playgroud)
它可以使用子查询来完成,但我认为这不是组织表的最合乎逻辑的方式。
| 归档时间: |
|
| 查看次数: |
8051 次 |
| 最近记录: |