postgre在接受好友请求时为每个好友创建记录



我是 sql 的新手,对于 postgres,我正在尝试使用三个表创建一个朋友系统。用户表、好友请求表和好友表,一旦接受,它们将保存用户关系。

好友请求表

id
sender_id
recipient_id

好友表

id
user_id
friend_id

我目前正在尝试编写一些sql,因此一旦接受好友请求,好友请求表中的相应请求记录将被删除,然后将两条记录插入到好友表中以建立友谊。每个用户一个。所以AB和BA。

我尝试了沿线查询,但我没有运气。

WITH friend_request AS (
DELETE FROM friend_requests
WHERE id = friendrequestid
RETURNING sender_id, recipient_id
)
INSERT INTO user_friends (user_id, friend_id) 
(SELECT sender_id, recipient_id FROM friend_request),
(SELECT recipient_id, sender_id FROM friend_request);

有没有正确的方法可以按照我尝试的方式进行两次插入?还是我以错误的方式接近这一点?

提前谢谢你。

我想你想要union all

WITH friend_request AS (
DELETE FROM friend_requests
WHERE id = friendrequestid
RETURNING sender_id, recipient_id
)
INSERT INTO user_friends (user_id, friend_id) 
SELECT sender_id, recipient_id FROM friend_request
UNION ALL
SELECT recipient_id, sender_id FROM friend_request;

就个人而言,我会在删除新值之前插入新值,但您的方法很好。

最新更新