1个语句中的2个SQL更新

时间:2012-03-15 12:04:35

标签: sql sql-update

我试图做以下事情:

UPDATE table SET fieldA='valueA' WHERE id='id1', SET fieldB='valueB' WHERE id='id2';

但似乎无法让它发挥作用。有没有办法做到这一点,还是需要使用两个单独的SQL命令?

5 个答案:

答案 0 :(得分:10)

如果真的需要在一个语句中执行,您可以使用:

UPDATE table 
    SET fieldA = case when id = 'id1' then 'valueA' else fieldA end, 
        fieldB = case when id = 'id2' then 'valueB' else fieldB end
WHERE id in ('id1', 'id2');

但为了清晰(以及可维护性),使用两个语句会好得多。

答案 1 :(得分:2)

这最好用2个不同的UPDATE语句完成,因为你有2个不同的WHERE子句:

UPDATE table SET fieldA='valueA' WHERE id='id1'
UPDATE table SET fieldB='valueB' WHERE id='id2'

答案 2 :(得分:1)

MERGE INTO YourTable
   USING ( VALUES ( 'id1', 'valueA', NULL ), 
                  ( 'id2', NULL, 'valueB' ) )              
      AS source ( id, fieldA , fieldB )
         ON YourTable.id = source.id
WHEN MATCHED THEN
   UPDATE 
      SET fieldA = COALESCE(source.fieldA, YourTable.fieldA), 
          fieldB = COALESCE(source.fieldB, YourTable.fieldB);

答案 3 :(得分:0)

您需要使用2个单独的SQL语句,因为set运算符适用于由where子句过滤的整个结果集。

UPDATE table SET fieldA='valueA' WHERE id='id1'; UPDATE table SET fieldB='valueB' WHERE id='id2';

答案 4 :(得分:-3)

UPDATE table SET fieldA='valueA',fieldB='valueB' WHERE id in ('id1','id2')