问题:假设存在一张tmp表,记录了用户id和该用户关注的用户id,我们希望筛选出相互关注的用户,如何用sql求解?
求解方法一:直接用原表做关联判断,简单直接,但是存在数据膨胀的风险。
with tmp as
(
select "乔峰" as from_user,"段誉" as to_user
union all
select "乔峰" as from_user,"虚竹" as to_user
union all
select "虚竹" as from_user,"乔峰" as to_user
union all
select "徐风年" as from_user,"徐骁" as to_user
union all
select "徐骁" as from_user,"徐风年" as to_user
)
select
a.from_user,
a.to_user,
if(b.from_user is not null, 1, 0) as is_friend -- 1:互相关注
from tmp a
left join tmp b
on a.from_user=b.to_user and a.to_user=b.from_user
;
求解方法二:找到互相关注的人的规律,当他们是互相关注时,那么将from_user和to