我是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);
是否有正确的方法以我尝试的方式进行两次插入?或者我是以错误的方式接近这个?
提前谢谢你。
答案 0 :(得分:0)
我想你想要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;
就个人而言,我会在删除它们之前插入新值,但你的方法很好。