这样的事情是否可以不必使用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
的直接源。您确实必须涉及 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;