Sql 为每个插入的行分离冲突
我有下一个不起作用的查询:Sql 为每个插入的行分离冲突,sql,postgresql,sql-update,case,sql-insert,Sql,Postgresql,Sql Update,Case,Sql Insert,我有下一个不起作用的查询: INSERT INTO some_table (id, data, type_id) VALUES (12, 'text', 4) ON CONFLICT(id, type_id) DO UPDATE SET data = 'www', (11, 'ooo', 4) ON CONFLICT(id, type_id) DO UPDATE SET level = 'kkk' 如何为每个插入
INSERT INTO some_table (id, data, type_id)
VALUES (12, 'text', 4)
ON CONFLICT(id, type_id) DO UPDATE SET data = 'www',
(11, 'ooo', 4)
ON CONFLICT(id, type_id) DO UPDATE SET level = 'kkk'
如何为每个插入的行添加单独的冲突?您可以在集合部分使用大小写表达式:
INSERT INTO some_table (id, data, type_id)
VALUES (12, 'text', 4), (11, 'ooo', 4)
ON CONFLICT(id, type_id) DO UPDATE
SET data = case
when excluded.id = 12 then 'www'
when excluded.id = 11 then 'kkk'
end
可以在集合零件中使用大小写表达式:
INSERT INTO some_table (id, data, type_id)
VALUES (12, 'text', 4), (11, 'ooo', 4)
ON CONFLICT(id, type_id) DO UPDATE
SET data = case
when excluded.id = 12 then 'www'
when excluded.id = 11 then 'kkk'
end
您可以使用
case
表达式来实现这一点。这有点麻烦,因为您想更新不同的列,但逻辑是:
INSERT INTO some_table (id, data, type_id)
VALUES (12, 'text', 4), (11, 'ooo', 4)
ON CONFLICT(id, type_id) DO UPDATE SET
data = CASE WHEN id = 12 THEN 'www' ELSE data END,
level = CASE WHEN id = 11 THEN 'kkk' ELSE level END
您可以使用
case
表达式来实现这一点。这有点麻烦,因为您想更新不同的列,但逻辑是:
INSERT INTO some_table (id, data, type_id)
VALUES (12, 'text', 4), (11, 'ooo', 4)
ON CONFLICT(id, type_id) DO UPDATE SET
data = CASE WHEN id = 12 THEN 'www' ELSE data END,
level = CASE WHEN id = 11 THEN 'kkk' ELSE level END
有一个问题,实际上我正在使用JS map()函数来构建这样的查询。因此,在每次迭代之后,所有数据都将被复制/粘贴。所以很难在冲突(id,type_id)上有唯一的更新集有一个问题,实际上我正在使用JS map()函数来构建这样的查询。因此,在每次迭代之后,所有数据都将被复制/粘贴。所以很难有唯一的冲突(id,type_id)DO更新集