检查表

时间:2018-03-28 22:33:54

标签: sql postgresql

我正在使用表格来表示朋友/朋友请求。基本上我的想法是有这样的表结构:

CREATE TABLE friends( 
    user_id NUMERIC NOT NULL, 
    friend_user_id NUMERIC NOT NULL 
    UNIQUE (user_id,friend_user_id)
)

当用户想要创建好友请求时,请添加一行:

INSERT INTO friends(user_id,friend_user_id) VALUES($1,$2)

然后,当其他用户接受好友请求时,您只需添加上一行的倒数(即,收件人在技术上会将好友请求发送回发件人,从而完成好友关系):

INSERT INTO friends(user_id,friend_user_id) VALUES($2,$1)

我的问题:

如果我想获取用户的所有朋友,我将不得不获取具有该用户ID的所有行,并且我希望内部连接到包含用户信息的另一个表,我将如何在查询中检查是否存在行反比关系?

P.S。我想我可以很容易地做多个查询但我宁愿只有一个查询,如果可能的话。

1 个答案:

答案 0 :(得分:0)

<强>解决方案:

SELECT users.id,users.username,users.avatar FROM users 
   INNER JOIN friends ON users.id = friends.user_id
   WHERE friends.user_id = $1 AND 
   EXISTS (SELECT 1 FROM friends WHERE friend_user_id = $1 AND user_id = friends.user_id)