sql:如何从同一个表中获取相关数据

时间:2014-05-20 06:35:01

标签: sql postgresql

我有一个新问题,请帮忙

我有两张桌子:

users (id, username)

follows (follow, follower)

follow是被关注的人,follower - 关注follow的人。 followfollower都是来自users表格的ID。

我需要查找被我跟踪的人的所有用户名,并且如果他们关注我,还要获取状态。反之亦然。

对我来说最大的问题是如果他们(我)跟着我回去怎么办。

我写的是:

select users.id, users.username, f.follow from users 
left join follows f on f.follow = users.id where f.follower = 78; 

它给了我所关注的所有用户但没有信息,如果他们跟着我回来......

====

更新

提供的查询FuzzyTree适合我。但实际上我有一个相关的问题。如果我想获得用户78的所有关注者,并为所有未跟随我的用户(用户71)提供关注按钮,该怎么办

2 个答案:

答案 0 :(得分:2)

select users.id, users.username, f.follow, 
CASE 
WHEN EXISTS(SELECT 1 from follows f1 where f1.follow=78 and f1.follower=f.follow)
THEN 'Following ME' else 'Not' END as Folovingme
from users 
left join follows f on f.follow = users.id 
where f.follower = 78;

答案 1 :(得分:1)

select users.id, users.username, f2.follow also_follows_follower
from users 
join follows f on f.follow = users.id 
left join follows f2 on f2.follower = users.id and f2.follow = f.follower
where f.follower = 78; 
如果他们不跟随关注者,

also_follows_follower将为null

如果你想检查另一个用户,只需添加另一个左连接

select users.id, users.username, 
f2.follow also_follows_follower, f3.follow also_follows_me
from users 
join follows f on f.follow = users.id 
left join follows f2 on f2.follower = users.id and f2.follow = f.follower
left join follows f3 on f3.follower = users.id and f3.follow = 71
where f.follower = 78;
相关问题