我有一个名为'friends'的表,其中'follow'是被关注的用户的id,'follower'是执行了以下操作的用户的id,如下所示:
id | followed | follower
------------------------------
1 | 34 | 67
2 | 89 | 65
3 | 67 | 34
4 | 51 | 12
5 | 78 | 18
6 | 18 | 78
我可以运行显示用户正在关注的用户的查询以及对谁足够轻松地跟踪用户的查询,但我希望能够做的是运行单个查询,该查询显示友谊被回报的位置,例如:
SELETCT * FROM friends WHERE
-- follower and followed have followed each other
因此,对于上述情况,这将返回id 1和5(或3和6)。
如何在单个查询中实现此匹配?
答案 0 :(得分:3)
Select f1.id, f2.id FROM friends as f1
JOIN friends as f2
ON f1.followed = f2.follower AND f1.follower = f2.followed
答案 1 :(得分:1)
选中此fiddle
只需使用以下条件的连接
select * from
temp t1 join temp t2
where t1.follower=t2.followed
and t1.followed=t2.follower
答案 2 :(得分:0)
当然可以这样做。 SQL非常强大。以下是使用带有相关子查询的exists
子句执行此操作的示例:
select f.*
from follows f
where exists (select 1
from follows f2
where f2.followed = f.follower and f2.follower = f.followed
);
答案 3 :(得分:0)
您可以在下面使用或查询
SELECT *
FROM `friends`
WHERE (
`follower` = '34'
OR followed = '34'
)