找到与用户尚未建立友谊的“帐户”

时间:2011-07-03 18:09:12

标签: mysql sql

我有一个表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;

虽然我不明白左/右连接位应该找到找不到朋友条目的技巧。

1 个答案:

答案 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