选择两列相互引用的匹配行

时间:2013-09-11 11:20:49

标签: mysql

我有一个名为'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)。

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

4 个答案:

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