如何在PostgreSQL中嵌入多行

时间:2016-04-29 06:09:45

标签: postgresql upsert postgresql-9.5

我正在尝试在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子句中插入的行?或者还有其他方式吗?

1 个答案:

答案 0 :(得分:16)

冲突的值可通过excluded别名获得:

INSERT INTO a (id, x)
SELECT id, x 
FROM b
ON CONFLICT (id) DO UPDATE
    SET x = excluded.x;