我目前正在研究MySQL的SQL查询,需要找出所有不在我朋友列表中的朋友。这个查询语句看起来很简单,但是我很长时间都在尝试它并且我没有成功。下面是我桌子的架构。
tbl_user
iUserID(int)
userFullName(varchar)
tbl_user_friend
iUserID(int)
iFriendID(int)
此处' tbl_user'包含用户的所有信息,并包含在&#tbl_user_friend'包含他们的朋友关系。
让我们说User1向User2发送请求,我们在' tbl_user_friend'中有1条记录([1,2])。之后,User2接受了这个请求,我又向“tbl_user_friend”中添加了一行' tbl_user_friend' ([2,1])。
所以现在我在' tbl_user_friend'中有2个条目。 ([1,2],[2,1])。
User1再次向用户3发送rquest,并在表格中有3个条目,如下所示 ([1,2],[2,1],[1,3])
但是现在我正在尝试获取所有不是User1的朋友的用户。所以我期待结果如([3,User3],[4,User4],[5,User5])。因为User3还没有接受请求。在期待的结果中,我又添加了2个条目" User4"和" User5",这些用户未与来自" tbl_user_friend"的用户1连接。 (换句话说,没有向User1发送好友请求的用户)。
期待结果=(未接受我的请求的朋友+没有向我发送朋友请求的朋友)
我是MySQL的初学者,目前正在研究这些问题及其解决方案。
答案 0 :(得分:0)
试试这个:
SELECT iUserID FROM tbl_user
WHERE iUserID != 3
AND iUserID NOT IN (SELECT b.iFriendID AS friendID FROM tlb_user a JOIN tlb_user_friend b
ON a.iUserID = b.iUserID
WHERE a.iUserId = 3
AND EXISTS (SELECT 1 FROM tbl_user_friend
WHERE iUserID = friendID AND iFriendID = 3))
not in(SELECT b.iFriendID ... AND iFriendID=3)
)中的子查询选择 与iUserID 3的朋友的所有用户(特别是基本上是iUserID的iFriendID)。然后剩下的查询选择不在我们从子查询中获得的朋友列表中的所有用户。
您可以将代码中的所有3个更改为您想要获取非朋友用户列表的iUserID。