我正在尝试在PostgreSQL 9.5.2中编写这样的查询:
INSERT INTO a (id, x)
SELECT id, x FROM b
ON CONFLICT (id) DO UPDATE
SET x = b.x
WHERE b.y < 100
但我得到ERROR: missing FROM-clause entry for table "b"
。我必须遗漏一些基本的东西,但是如何引用UPDATE子句中插入的行?或者还有其他方式吗?
答案 0 :(得分:16)
冲突的值可通过excluded
别名获得:
INSERT INTO a (id, x)
SELECT id, x
FROM b
ON CONFLICT (id) DO UPDATE
SET x = excluded.x;