我试图做以下事情:
UPDATE table SET fieldA='valueA' WHERE id='id1', SET fieldB='valueB' WHERE id='id2';
但似乎无法让它发挥作用。有没有办法做到这一点,还是需要使用两个单独的SQL命令?
答案 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')