PostgreSQL查询指定用户粉丝列表(含活跃头像及无头像粉丝)
获取指定用户粉丝及活跃头像的正确SQL查询
你之前的查询无法返回无头像粉丝的原因是:把p.is_active = true放在了WHERE子句中。左连接后,无头像粉丝对应的profile_picture表字段全为NULL,NULL = true的判断结果为假,导致这类记录被过滤掉了。
正确的做法是将活跃头像的筛选条件放到LEFT JOIN的ON子句中,这样只会在关联头像表时匹配活跃的头像,没有头像的用户记录依然会被保留,active_profile_pic字段显示为NULL:
SELECT u.id, u.username, p.profile_pic AS active_profile_pic FROM followers f INNER JOIN users u ON u.id = f.follower_id LEFT JOIN profile_picture p ON u.id = p.owner_id AND p.is_active = true WHERE f.following_id = '替换为目标用户ID';
另一种等价写法是先通过子查询筛选出所有用户的活跃头像,再与粉丝、用户表左连接,逻辑更清晰:
SELECT u.id, u.username, pp.active_profile_pic FROM followers f INNER JOIN users u ON u.id = f.follower_id LEFT JOIN ( SELECT owner_id, profile_pic AS active_profile_pic FROM profile_picture WHERE is_active = true ) pp ON u.id = pp.owner_id WHERE f.following_id = '替换为目标用户ID';
两种写法都能满足需求:返回所有关注指定用户的粉丝,包含无头像的用户,且每个用户只显示其活跃头像(如果有的话)。
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

