这样的事情是否可以不用使用
WITH
?CREATE TEMP TABLE temp AS
代替手动创建临时表吗?
CREATE TEMP TABLE temp
( action text,
winery_id int,
brand text );
MERGE INTO wines w
USING wines_updates u
ON u.winery_id = w.winery_id
WHEN MATCHED THEN
UPDATE
SET stock = u.stock
RETURNING merge_action() action, w.winery_id, w.brand
INTO temp;
MERGE
不能直接在 子查询 中使用,它不能作为 create table as
的直接源,并且除了该子句之外,它不提供额外的 into
子句在顶部。
这与
MERGE
的工作方式无关,而是与一般情况下允许任何 数据修改语句 相关,无论有或没有 returning
子句。
您必须参与 CTE:
CREATE TEMP TABLE tmp AS
WITH cte AS(
MERGE INTO wines w
USING wines_updates u
ON u.winery_id = w.winery_id
WHEN MATCHED THEN
UPDATE
SET stock = u.stock
RETURNING merge_action() action, w.winery_id, w.brand)
SELECT*FROM cte;
CREATE TABLE AS
明确列出了必须遵循的查询类型:
query
、SELECT
或TABLE
命令,或者运行准备好的VALUES
、EXECUTE
或SELECT
查询的TABLE
命令。VALUES
SELECT INTO
还必须涉及 CTE:
WITH cte AS(
MERGE INTO wines w
USING wines_updates u
ON u.winery_id = w.winery_id
WHEN MATCHED THEN
UPDATE
SET stock = u.stock
RETURNING merge_action() action, w.winery_id, w.brand)
SELECT*INTO TEMP TABLE tmp2 FROM cte;
其他 DML(如
insert
、update
或 delete
)也不能用作 create table as
的直接源。您也不能用模仿 into
语法的 select into
来创建表格。