2 обновления SQL в 1 операторе - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь сделать что-то вроде следующего:

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

Но, кажется, не могу заставить его работать. Есть ли способ сделать это, или мне нужно будет использовать две отдельные команды SQL?

Ответы [ 5 ]

10 голосов
/ 15 марта 2012

Если вам действительно нужно сделать это в одном утверждении, вы можете использовать это:

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');

Но для ясности (и, следовательно, для удобства обслуживания) было бы гораздо лучше использовать два утверждения.

2 голосов
/ 15 марта 2012

Лучше всего это сделать в виде 2 разных операторов UPDATE, потому что у вас есть 2 разных предложения WHERE:

UPDATE table SET fieldA='valueA' WHERE id='id1'
UPDATE table SET fieldB='valueB' WHERE id='id2'
1 голос
/ 15 марта 2012
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);
0 голосов
/ 15 марта 2012
UPDATE table SET fieldA='valueA',fieldB='valueB' WHERE id in ('id1','id2')
0 голосов
/ 15 марта 2012

Вам нужно будет использовать 2 отдельных оператора SQL, потому что оператор set работает со всем набором результатов, который фильтруется предложением where.

UPDATE table SET fieldA='valueA' WHERE id='id1'; UPDATE table SET fieldB='valueB' WHERE id='id2';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...