Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为每个插入的行分离冲突_Sql_Postgresql_Sql Update_Case_Sql Insert - Fatal编程技术网

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更新集