如何编写条件左连接

时间:2010-11-22 07:17:44

标签: mysql left-join

我有2个名为useruserFriend的表。我希望用户表中的所有用户和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,第一个表使用左连接。

2 个答案:

答案 0 :(得分:4)

这是一个非传统的要求...但这会给你你想要的结果。

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

答案 1 :(得分:0)

对于你想要的东西,你不需要从两个表中查询。只需使用userFriend就可以获得数据。您只需要用户名表。

SELECT DISTINCT userID FROM userFriend
WHERE friendUserID = ?

这将为您提供所有具有您所需特定朋友的用户。 您可以选择添加INNER JOIN以查看名称:

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

可以使用子查询来完成,但我认为这不是组织表格的最合理方式。