Оператор SQL с несколькими SET и WHERE - PullRequest
35 голосов
/ 23 июня 2011

Мне интересно, если это правильный запрос:

UPDATE  table
SET ID = 111111259

WHERE ID = 2555

AND SET ID = 111111261

WHERE ID = 2724

AND SET ID = 111111263

WHERE ID = 2021

AND SET ID = 111111264

WHERE ID = 2017

Ответы [ 11 ]

44 голосов
/ 23 июня 2011

НЕТ!

Вам придется обращаться с ними индивидуально

Update [table]
Set ID = 111111259
WHERE ID = 2555

Update [table]
Set ID = 111111261
WHERE ID = 2724

--...
42 голосов
/ 23 июня 2011

Лучший вариант - несколько обновлений.

В качестве альтернативы вы можете сделать следующее, но рекомендуется НЕ :

UPDATE table
SET ID = CASE WHEN ID = 2555 THEN 111111259 
              WHEN ID = 2724 THEN 111111261
              WHEN ID = 2021 THEN 111111263
              WHEN ID = 2017 THEN 111111264
         END
WHERE ID IN (2555,2724,2021,2017)
13 голосов
/ 23 июня 2011

Нет. Это неверный запрос. У вас может быть только один оператор SET с несколькими полями, однако, также может быть один оператор WHERE

update table1 set field1=value1, field2=value2, field3=value3 where filed4=value5
4 голосов
/ 23 июня 2011

Нет , вот как вы это делаете:

UPDATE table SET ID = 111111259 WHERE ID = 2555

UPDATE table SET ID = 111111261 WHERE ID = 2724

UPDATE table SET ID = 111111263 WHERE ID = 2021

UPDATE table SET ID = 111111264 WHERE ID = 2017
3 голосов
/ 23 июня 2011

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

2 голосов
/ 20 января 2017

Вы также можете использовать регистр, например так:

UPDATE  table
SET ID = case

when ID = 2555 then 111111259

when ID = 2724 then 111111261

when ID = 2021 then 111111263

when ID = 2017 then 111111264

else ID
end
2 голосов
/ 23 июня 2011

так как sql все эти строки, которые вы хотите сделать, я бы сделал так, как вы это делаете

Внутри вас Sql менеджмент тоже выполняет запрос, и это должно работать.

UPDATE  table
SET ID = 111111259 WHERE ID = 2555    

UPDATE  table
SET ID = 111111261 WHERE ID = 2724

UPDATE  table
SET ID = 111111263 WHERE ID = 2021

UPDATE  table
SET ID = 111111264 WHERE ID = 2017
2 голосов
/ 23 июня 2011

Нет.Вам придется делать отдельные обновления:

UPDATE  table
SET ID = 111111259
WHERE ID = 2555

UPDATE  table
SET ID = 111111261
WHERE ID = 2724

UPDATE  table
SET ID = 111111263
WHERE ID = 2021

UPDATE  table
SET ID = 111111264
WHERE ID = 2017
0 голосов
/ 20 июля 2018

Вы можете сделать это

WITH V(A,B) AS (VALUES 
     (2555,111111259)    
    ,(2724,111111261)     
    ,(2021,111111263)    
    ,(2017,111111264)    

    )
SELECT COUNT(*) FROM NEW TABLE (
    UPDATE table
    SET id =     (SELECT B FROM V WHERE ID = A)
    WHERE EXISTS (SELECT B FROM V WHERE ID = A)
) 

Обратите внимание, что не работает с таблицами, организованными по столбцамИспользуйте MERGE в этом случае

0 голосов
/ 07 марта 2018

Нет, вам нужно обрабатывать каждое утверждение отдельно ..

UPDATE table1
 Statement1;
 UPDATE table 1
 Statement2;

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...