请求 SQL : 相互关注的用户

Request SQL : users that follow each other

早上好,

我是这样构造我的数据库的:

我正在为我的请求而苦苦挣扎。 如何找到相互关注的用户? 我试过了,没用。

SELECT
    U1.id,
    U2.id
FROM
    USER U1,
    USER U2,
    FOLLOWS F1,
    FOLLOWS F2
WHERE
    F1.id_follower = U1.id
    AND F1.if_followed = U2.id
    AND F2.id_follower = U1.id
    AND F2.if_followed = U2.id

感谢阅读。

我想你想在 follows 上进行自我加入:

select f1.id_follower as id1, f1.id_followed as id2
from follows f1
inner join follows f2 
    on  f2.id_follower = f1.id_followed
    and f2.id_followed = f1.id_follower
where f1.id_follower < f1.id_followed

这带来了一对互相关注的用户;每对只显示一次(最小的 id 在前)。

如果需要相应的用户信息,那就再加入两个:

select i1.id as id1, u1.name as name1, i1.id as id2, u2.name as name2
from follows f1
inner join follows f2 
    on  f2.id_follower = f1.id_followed
    and f2.id_followed = f1.id_follower
inner join users u1 
    on  u1.id = f1.id_follower
inner join users u2
    on  u2.id = f1.id_followed
where f1.id_follower < f1.id_followed

select u.id, u.name 来自用户 u left join follows f on u.id=f.id_follower where f.id_follower in (select id_followed 来自以下);