最有效的方式找朋友的朋友,不包括朋友

时间:2014-01-12 03:21:33

标签: mysql

假设我有一个名为friends的表,对于每个友谊,我添加两个条目。例如,如果用户1和2是朋友,我们将:

uid1 uid2
----------
1    2
2    1

我的目标是找到朋友的朋友,撇开朋友。以下查询给了我朋友的朋友(包括朋友):

SELECT f2.uid2 FROM friends f1, friends f2 WHERE f1.uid1='YOUR_ID' AND f1.uid2=f2.uid1 AND f2.uid2!='YOUR_ID'

我的偏好是不使用IN或NOT IN。您能想出任何补充此查询的内容吗?

2 个答案:

答案 0 :(得分:0)

您可以使用其他join和聚合:

来执行此操作
SELECT f2.uid2
FROM friends f1 join
     friends f2
     on f1.uid1 = 'YOUR_ID' AND f1.uid2 = f2.uid1 AND f2.uid2 <> 'YOUR_ID'` join
     friends f3
     on f2.uid2 = f3.fuid1
GROUP BY f2.uid2
HAVING sum(f3.uid2 = 'YOUR_ID') = 0;

答案 1 :(得分:0)

与您自己的朋友添加外部联接,以便您可以将其过滤掉。

SELECT f2.uid2 FROM friends f1
JOIN friends f2 ON f1.uid2 = f2.uid1
LEFT JOIN friends f3 ON f3.uid2 = f2.uid2 AND f3.uid1 = 'YourID'
WHERE f1.uid1='YourID' 
AND f2.uid2!='YourID'
AND f3.uid2 IS NULL

SQLFIDDLE