sql - SQL查询好友关系双方

标签 sql postgresql

我的 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 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 }, ]

最佳答案

存在:

select f.*,
  exists (
    select 0 from "Friendships"
    where "toUserId" = f."fromUserId" and "fromUserId" = f."toUserId"
  ) addedBack
from "Friendships" f
where f."fromUserId" = 1

对于此示例数据:

INSERT INTO "Friendships"(id, "fromUserId", "toUserId") VALUES
(444, 1, 22), (445, 1, 67), (446, 1, 599), (447, 1, 733), 
(448, 67, 1), (449, 599, 1);

结果:

>  id | fromUserId | toUserId | addedback
> --: | ---------: | -------: | :--------
> 444 |          1 |       22 | f        
> 445 |          1 |       67 | t        
> 446 |          1 |      599 | t        
> 447 |          1 |      733 | f        

参见 demo .

关于sql - SQL查询好友关系双方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981508/

相关文章:

ruby-on-rails - 当前日期之后没有关联记录的最早日期

mysql - FIND_IN_SET 与 GROUP_CONCAT 太慢(MySQL 中的密集排名)

ruby-on-rails - rails 问题 - "Could not find gem ' pg”

ruby-on-rails - 升级到 macOS Mojave 后,如何找到 Rails 应用程序在客户端首次请求后崩溃的根源(pg.rb 段错误)?

java - JPA 2.1 StoredProcedureQuery 与 PostgreSQL 和 REF_CURSORs

postgresql - postgres中的递归函数

sql - 克隆数据库并进行备份可能吗?

c# - 有没有更简单的方法在 android 应用程序和服务器数据库之间传输数据?

同一天的 MySQL 求和值

MySQL 年间隔,包括上一年的整个月份