我有一个表accounts
(id,full_name)和account_friends
(account_id,friend_id)。 friend_id基本上是另一个用户的帐号。如何查找帐户ID = 1的所有帐户尚未建立友谊?
回应@OMG小马。
基本上,我确实理解这需要多个连接。我的逻辑是这样的:
SELECT
a2.id
FROM
accounts a1
/* left/right join a1 with account_friends */
INNER JOIN
accounts a2
ON
af1.friend_id = a2.id
WHERE
a1.id;
虽然我不明白左/右连接位应该找到找不到朋友条目的技巧。
答案 0 :(得分:0)
这将为您提供所有帐户ID和名称,其中ID不是帐户ID = 1而不是帐户id = 1的朋友:
SELECT id, full_name
FROM accounts
WHERE id NOT IN (SELECT friend_id
FROM account_friends
WHERE account_id = 1)
AND id <> 1
正如评论中提到的antonis_wrx,如果帐户的所有友情都存储了帐户 - &gt;朋友(即(1,2))而不是混合物,即(1,2)和( 3,1)。
这是一个适用于第二种情况的查询:
SELECT id, full_name
FROM accounts
WHERE id NOT IN (SELECT friend_id FROM account_friends WHERE account_id = 1)
AND id NOT IN (SELECT account_id FROM account_friends WHERE friend_id = 1)
AND id <> 1