SQL从另一个表中的单个字段插入多行

时间:2014-03-26 13:38:22

标签: sql postgresql-9.3

首先,我使用PSQL作为我的数据库引擎。我有以下表格:

feed_outputs
----------------------------
id |  feed_id |  key     ...
----------------------------
6      5        'Feed 1'
7      5        'Feed 2'
8      5        'Feed 3'
9      5        'Feed 4'
10     5        'Feed 5'
11     6        'Feed 1'

另一张桌子:

alerts
-------------------------------------------
feed_type_id | priority |   label   | feed_output_id
-------------------------------------------
     1            1       'Label1'       11

我想要做的是创建一个insert语句,在feed_outputs表中选择feed_id=5中的所有feed输出,并在插入语句中使用它,将feed_output_id放入新行中警报表。

我基本上想要结合以下两个查询:

SELECT id FROM feed_outputs where feed_id=5;
INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) VALUES 
(1,1,'Label2', <each feed_output.id from statement above>);

我尝试过:

WITH outputs AS (select * from feed_outputs where feed_id=5)
INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) VALUES
(1,1,'Label2',(select outputs.id from outputs));

但是这显然不适用于嵌入insert语句的values部分的select语句。我想保持标签相同(它只是一个示例字段),我唯一想要改变的是feed输出id。所以我的最终警报表应如下所示:

alerts
-------------------------------------------
feed_type_id | priority |   label   | feed_output_id
-------------------------------------------
     1            1       'Label1'       11
     1            1       'Label2'       6
     1            1       'Label2'       7
     1            1       'Label2'       8
     1            1       'Label2'       9
     1            1       'Label2'       10

您是否了解可以帮助我使用当前表配置实现此目的的查询?

2 个答案:

答案 0 :(得分:1)

我相信这是你正在寻找的:

INSERT INTO alerts (feed_type_id,priority,label,feed_output_id)
SELECT 1,1,'Label2',id
  FROM feed_outputs
 WHERE feed_id = 5;

尝试执行SELECT一次,而不是INSERT,只是为了确认它做了正确的事情。然后,您可以根据需要调整查询。

这称为INSERT INTO ... SELECT

http://www.w3schools.com/sql/sql_insert_into_select.asp

答案 1 :(得分:0)

这应该这样做:

INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) 
select 1,1,'Label2', id
from feed_outputs 
where feed_id=5;