【问题标题】:Why Common table expression does not work with INSERT SELECT为什么公用表表达式不适用于 INSERT SELECT
【发布时间】:2016-06-14 16:57:45
【问题描述】:

我正在尝试在我的 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 `'(''

【问题讨论】:

  • 你用的是什么数据库?

标签: sql common-table-expression netezza


【解决方案1】:

您的查询应该适用于大多数数据库。但是,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 支持)。
  • 你是个天才!我会尽快接受答案
猜你喜欢
  • 2020-08-01
  • 2014-01-03
  • 2022-08-18
  • 2021-08-05
  • 2022-01-14
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多