PSQL 中的 CTE/with 子句

Posted

技术标签:

【中文标题】PSQL 中的 CTE/with 子句【英文标题】:CTE/with clause in PSQL 【发布时间】:2018-05-23 18:19:22 【问题描述】:

我得到错误:

在执行以下操作时,“INSERT”* 处或附近出现语法错误:

WITH
    sq as (select * from input_client)
INSERT INTO cleaned
select *
  from weekly
    cross join sq;

请参阅(红色)语法手册: https://www.postgresql.org/docs/9.1/static/queries-with.html

【问题讨论】:

如果您使用Greenplum,为什么还要阅读 Postgres 手册? @a_horse_with_no_name 因为 Greenplum 基于 PostgreSQL 8.3。 PostgreSQL 直到 8.4 之后才引入具有 DML 的 CTE,即使在 Github 上的当前代码库中,Greenplum 也不支持 CTE 的 DML 部分。 @JonRoberts 更有理由阅读 Greenplum 手册而不是 Postgres 手册 【参考方案1】:
INSERT INTO cleaned
select w.*
from weekly w, input_client;

如果你只想要 input_client 和 week 的笛卡尔积,就这样写。

【讨论】:

以上是关于PSQL 中的 CTE/with 子句的主要内容,如果未能解决你的问题,请参考以下文章

无法找出复杂子句中的 PSQL where 问题

查询jsonb PSQL中数组元素的where子句

使用 JDBCTemplate 在“IN”子句中将 List<String> 作为查询参数传递时获取 PSQL 异常

JPQL 中的 LIMIT 子句替代方案是啥?

Knex:如何在 knex 中的有子句中编写 ARRAY_AGG?

ON CONFLICT DO UPDATE 缺少 FROM 子句