我有一个表“ employee”,其中有两列“ firstname”和“ lastname”,并且对“ lastname”列具有唯一的约束。
如果我要发送多行,如何从输入中更新匹配的行,并为不匹配的行创建新行。
数据库中的现有数据:
|id | firstname | lastname |
+----+-------------+-----------+
| 1 | John | Doe |
输入行:
| firstname | lastname |
+-----------+-----------+
| John1 | Doe |
| Bar | foo |
这是我正在使用的脚本:
INSERT INTO Identification (firstname,lastname)
(VALUES
('John1','Doe'),
('Bar','foo')) as u2
ON CONFLICT ON CONSTRAINT lname_unique_constraint
DO UPDATE
SET
firstname = u2.firstname
RETURNING Id;
它给了我这个错误:
错误:“ as”处或附近的语法错误
如果脚本可以正常运行,则应使数据库保持以下状态:
|id | firstname | lastname |
+----+-------------+-----------+
| 1 | John1 | Doe |
| 2 | Bar | foo |
注意:
我正在使用PostgreSQL 10.6,并且id
列的类型为number并设置为auto sequence。
答案 0 :(得分:1)
您可以使用EXCLUDED
:
请注意,特殊的排除表用于引用最初建议插入的值
INSERT INTO Identification (firstname,lastname)
VALUES
('John1','Doe'),
('Bar','foo')
ON CONFLICT ON CONSTRAINT fname_unique_constraint
DO UPDATE
SET
firstname = EXCLUDED.firstname
RETURNING Id;