web-dev-qa-db-fra.com

Instruction SQL avec plusieurs SET et WHERE

Je me demande si cette requête est valide:

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
33
ProgramNov

NON!

Vous devrez gérer ceux-ci individuellement

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

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

--...
40
Brandon Boone

La meilleure option est plusieurs mises à jour.

Sinon, vous pouvez faire ce qui suit, mais estPASrecommandé:

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)
40
niktrs

Non, ce n'est pas une requête valide . Vous ne pouvez avoir qu'une seule instruction SET, avec plusieurs champs, mais une seule clause WHERE.

update table1 set field1=value1, field2=value2, field3=value3 where filed4=value5
13
Ahmad

Nope , voici comment vous le faites:

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
4
Kyle Undefined

Non, vous devez créer une requête distincte pour chaque mise à jour.

3
Limey

Vous pouvez également utiliser le cas alors comme ceci:

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

Non, vous devrez faire des mises à jour séparées:

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
BradC

depuis SQL toutes ces lignes que vous voulez le faire, je ferais que vous êtes un code comme celui-ci

Dans votre gestion SQL, exécutez également une requête et cela devrait fonctionner.

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
PRacicot

Non, vous devez gérer chaque déclaration séparément.

UPDATE table1
 Statement1;
 UPDATE table 1
 Statement2;

Etc

0
pr0grammaniac

Tu pourrais faire ça

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

Remarque, ne fonctionne pas sur les tables organisées par colonnes. Utilisez MERGE dans ce cas

0
Paul Vernon