简体   繁体   English

插入包含来自两个不同SELECT查询的两个字段的行?

[英]Insert a row with two fields from two different SELECT queries?

I have the following PostgreSQL database laid out: 我布置了以下PostgreSQL数据库:

数据库

Now, I have trouble forming an insertion statement. 现在,我很难形成插入语句。 I want to insert rows to DiscussionParticipation so that for each Discussion there would be two entries: 我想向DiscussionParticipation插入行,以便对于每次Discussion都将有两个条目:

  • One for the User who owns the related Activity 一个给拥有相关ActivityUser

  • One for the User who owns the Response related to the Activity 一个给拥有与Activity相关的ResponseUser

For example, if there were the following entries: 例如,如果存在以下条目:

Discussion:
id: 1 | Activity_id: 1

Activity:
id: 1 | User_id: 1

Response:
id: 1 | Activity_id: 1 | User_id: 2

User:
id: 1 | username: Adam
id: 2 | username: Bill

In other words: User 'Adam' has created an activity in which user 'Bill' has created a response to. 换句话说:用户“亚当”创建了一个活动,用户“比尔”创建了一个响应。 There exists a related Discussion for the activity. 该活动存在相关的讨论。

Now, I'd like to add these two rows to the DiscussionParticipation table: 现在,我想将这两行添加到DiscussionParticipation表中:

DiscussionParticipation:
User_id: 1 | Discussion_id: 1
User_id: 2 | Discussion_id: 1

How do I form this INSERT? 如何形成此INSERT?

A list of users can participate activity of discussion union a list of users can participate response of discussion. 用户列表可以参与讨论活动的联合 ,用户列表可以参与讨论的响应。

insert into DiscussionParticipation (User_id, Discussion_id) (

    select a.User_id as User_id, d.id as Discussion_id
    from Discussion d
    inner join Activity a on (a.id = d.Activity_id)

    union

    select r.User_id as User_id, d.id as Discussion_id
    from Discussion d
    inner join Response r on (r.Activity_id = d.Activity_id)

);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM