我打算在Postgresql中根据几个SELECT写一个INSERT INTO请求但是没有成功。 我有一个表包含我选择的数据(srctab),另一个表我插入数据(dsttab)。 这就是我的经历:
INSERT INTO dsttab (dstfld1, dstfld2) WITH
t1 AS (
SELECT srcfld1
FROM srctab
WHERE srcfld3 ='foo'
),
t2 AS (
SELECT srcfld5
FROM srctab
WHERE srcfld6 ='bar'
) select srcfld1, srcfld5 from srctab;
你能帮忙完成这项工作吗?谢谢!
答案 0 :(得分:1)
注意:我猜你想在这做什么。我的猜测是你要插入一行包含来自CTE的值(那是WITH
块。)。如果写入的查询是有效的语法,则会在dsttab
中为每行行插入一行srctab
。
这里你真的不需要CTE。实际上只应在需要多次引用相同子查询时才使用CTE;这就是他们的存在。 (偶尔,你可以在某种程度上滥用它们来控制PostgreSQL中的某些性能方面,但在其他数据库中并非如此,并且无论如何都应该避免这种情况。)
只需将您的查询排成一行:
INSERT INTO dsttab (dstfld1, dstfld2)
VALUES (
(SELECT srcfld1
FROM srctab
WHERE srcfld3 ='foo'),
(SELECT srcfld5
FROM srctab
WHERE srcfld6 ='bar')
);
这里的关键是用括号括起子查询。