请求 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 来自以下);
早上好,
我是这样构造我的数据库的:
我正在为我的请求而苦苦挣扎。 如何找到相互关注的用户? 我试过了,没用。
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 来自以下);