假设我有一个名为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。您能想出任何补充此查询的内容吗?
答案 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