如何在PostgreSQL中插入或更新多行数据

27

我想在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个回答

57
冲突的值可通过 excluded 别名获得:
INSERT INTO a (id, x)
SELECT id, x 
FROM b
ON CONFLICT (id) DO UPDATE
    SET x = excluded.x;

1
非常棒的答案,很难找到并提供了解决多行插入问题的超级优雅的解决方案。谢谢! - mattdlockyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接