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,你能发布你的数据模型吗?我相信这样的要求意味着这里有一个问题。