首先,我使用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
您是否了解可以帮助我使用当前表配置实现此目的的查询?
答案 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
。
答案 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;