2016-01-20 95 views
-1

我目前正在研究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' 1])。

所以现在我在'tbl_user_friend'([1,2],[2,1])中有2个条目。

并再次发送用户1至rquest用户3,并有3项表像下面 ([1,2],[2,1],[1,3])

但现在我想获取所有不是User1的朋友的用户。所以我期待像([3,User3],[4,User4],[5,User5])的结果。由于User3尚未接受请求。并且在期望的结果中,我添加了另外两个条目“用户4”和“用户5”,它们是没有与来自“tbl_user_friend”的用户1连接的用户(换句话说,没有向User1发送好友请求的用户)。

期待的结果=(朋友谁不接受我的请求+的朋友谁没有给我朋友的要求)

我很初学者到MySQL,目前靠在这些类型的问题及其解决方案。

+0

你已经试过了什么mysql查询? – Ma3x

回答

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)) 

在没有子查询(SELECT b.iFriendID ... AND iFriendID=3))选择所有用户(特别是其本质iUserIDs的iFriendIDs)谁朋友iUserID 3.然后将其余的的查询选择所有不在我们从子查询中获得的朋友列表中的用户。

您可以将代码中的所有3更改为您希望获取不是朋友的用户列表的iUserID。