我有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
所以如果我的userID = 1, 然后我想要像
这样的结果userID userName userFriendID friendUserID
2 bbb 1 2
3 ccc NULL NULL
4 ddd 3 4
5 eee NULL NULL
所以这样我想要第二个表的条件,我只想加入第二个表,其中userID = 1,第一个表使用左连接。
答案 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
可以使用子查询来完成,但我认为这不是组织表格的最合理方式。