sql - 在接受好友请求后为每个朋友创建记录

时间:2018-05-26 14:24:16

标签: sql postgresql

我是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);

是否有正确的方法以我尝试的方式进行两次插入?或者我是以错误的方式接近这个?

提前谢谢你。

1 个答案:

答案 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;

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