首页 > 解决方案 > SQL查询好友关系双方

问题描述

我的 Postgres 表设置如下:

CREATE TABLE "Friendships" (
    id integer DEFAULT PRIMARY KEY,
    "fromUserId" integer NOT NULL REFERENCES "Users"(id),
    "toUserId" integer NOT NULL REFERENCES "Users"(id)
);

当用户获取他们的友谊时,我运行:SELECT * FROM Friendships WHERE fromUserId=XXXX.

如何修改查询,以便根据是否toUserId还添加了该用户将其他数据添加到结果中(真/假)?

示例结果:

[ { id: 444, fromUserId: 1, toUserId: 22, addedBack: false }, { id: 445, fromUserId: 1, toUserId: 67, addedBack: true }, { id: 446, fromUserId: 1, toUserId: 599, addedBack: true }, { id: 447, fromUserId: 1, toUserId: 733, addedBack: false }, ]

标签: sqlpostgresql

解决方案


您可以使用左外连接来检查互惠值:

select
  f.id,
  f.fromuserid,
  f.touserid,
  case when r.id is null then false else true end as addedback
from friendships f
left join friendships r on f.touserid = r.fromuserid 
                       and r.touserid = f.fromuserid 
where f.fromuserid = XXXX

推荐阅读