Sql 为什么公共表表达式不能与INSERT SELECT一起使用

Sql 为什么公共表表达式不能与INSERT SELECT一起使用,sql,common-table-expression,netezza,Sql,Common Table Expression,Netezza,我正在尝试在INSERT中使用公共表表达式。 当我这样做时: with A as (select col1,col2 from table1) select * from A 它起作用了 但当我这样做的时候: with A as (select col1,col2 from table1) insert into table2 (col1,col2) (select col1,col2 from A) 我得到: found "INSERT" (at char XXXXX) expectin

我正在尝试在INSERT中使用公共表表达式。 当我这样做时:

with A as (select col1,col2 from table1) select * from A
它起作用了 但当我这样做的时候:

with A as (select col1,col2 from table1) 
insert into table2 (col1,col2) (select col1,col2 from A)
我得到:

found "INSERT" (at char XXXXX) expecting `SELECT' or `'(''

您的查询应该适用于大多数数据库。但是,Oracle和早期版本的Postgres将CTE放在
select
旁边。因此,如果您使用的是Oracle、早期版本的Postgres或Postgres派生数据库:

insert into table2 (col1, col2)
    with A as (select col1, col2 from table1) 
    select col1, col2 from A;

此外,在
select
查询周围不需要括号。它不是子查询。

您的查询应该适用于大多数数据库。但是,Oracle和早期版本的Postgres将CTE放在
select
旁边。因此,如果您使用的是Oracle、早期版本的Postgres或Postgres派生数据库:

insert into table2 (col1, col2)
    with A as (select col1, col2 from table1) 
    select col1, col2 from A;

此外,在
select
查询周围不需要括号。它不是子查询。

您使用的是什么数据库?您使用的是什么数据库?谢谢。我使用的是netezza,它是Postgres。实际上,netezza和早期版本的Postgres都有相同的限制(即,
insert
不支持CTE,但
select
支持CTE)。你真是个天才!我会接受答案,只要它允许我这么做。我使用的是netezza,它是Postgres。实际上,netezza和早期版本的Postgres都有相同的限制(即,
insert
不支持CTE,但
select
支持CTE)。你真是个天才!我会尽快接受答案