假设我们有一个简单的表,
CREATE TABLE foo ( a int PRIMARY KEY, b int );
我想在里面写一个复杂的查询并参考那个查询
INSERT INTO foo
SELECT 5 AS z
ON CONFLICT (a)
DO UPDATE SET b = z;
但是,当我执行时,我收到这样的错误,
ERROR: column "z" does not exist
LINE 4: DO UPDATE SET b = z;
^
提示:表“ SELECT ”中有一个名为“z”的列,但不能从这部分查询中引用它。
有没有办法让这样的结构工作?
PostgreSQL 看不到您给它的别名列。这不是它的解析方式。它会看到
z
您尝试将其插入到a
psuedo-table 上的名称EXCLUDED
。你想这样做,有关更多信息,请参阅文档
INSERT
,