2

我有一个名为“friends”的表,其中“followed”是已关注用户的 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)。

如何在单个查询中实现这种匹配?

4

4 回答 4

3
Select f1.id, f2.id FROM friends as f1
JOIN friends as f2
ON f1.followed = f2.follower AND f1.follower = f2.followed 
于 2013-09-11T11:27:39.187 回答
1

检查这个小提琴

只需在以下条件下使用 join

 select * from 
 temp t1 join temp t2 
     where t1.follower=t2.followed 
     and t1.followed=t2.follower
于 2013-09-11T11:30:54.330 回答
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
             );
于 2013-09-11T11:26:32.657 回答
0

您可以在下方使用或查询

SELECT *
FROM `friends`
WHERE (
`follower` = '34'
OR followed = '34'
)
于 2013-09-11T11:29:08.960 回答