Mysql 如何编写条件左连接
我有两个名为Mysql 如何编写条件左连接,mysql,left-join,Mysql,Left Join,我有两个名为user和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
user
和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
所以如果我的userID=1,
那我就要这样的结果
userID userName userFriendID friendUserID
2 bbb 1 2
3 ccc NULL NULL
4 ddd 3 4
5 eee NULL NULL
因此,通过这种方式,我希望对第二个表使用条件连接,我只希望使用左连接将userID=1的第二个表与第一个表连接起来。对于您想要的内容,您不需要从两个表中进行查询。只需使用userFriend就可以获得数据。您将只需要用户名表
SELECT DISTINCT userID FROM userFriend
WHERE friendUserID = ?
这将为您提供所有拥有您需要的特定朋友的用户。
(可选)您可以添加内部联接以查看名称:
SELECT DISTINCT f.userID, u.name
FROM userFriend f
INNER JOIN users u ON u.userID = f.userID
WHERE friendUserID = ?
更新
关于你的结构的评论。您不需要userFriendID。用户ID和朋友ID的组合可以是您的密钥
查询的更新
SELECT * FROM users u
LEFT JOIN userFriend f on u.userID = f.userID
WHERE f.friendUserID = ?
这将返回所有具有好友X的用户。在此查询中,左连接并不重要。这种特殊情况使它变得无关紧要
为了得到你想要的,你需要执行这个
SELECT * FROM users u
LEFT JOIN (
SELECT DISTINCT * FROM userFriend f
WHERE friendID = 4
) x ON u.id = x.userId
可以使用子查询来完成,但我认为这不是组织表的最合乎逻辑的方式。这是一种非常规的要求。。。但这会给你想要的结果
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
看看你能不能把你的代码布局得更好一点(使用格式化帮助)。现在看来你有userID,userFriendID和friendUserID,而我相信你只需要两个ID,你能发布你的数据模型吗?我相信这样的要求意味着这里有一个问题。