2009-10-20 6 views
4

J'ai une table SQL comme ceci.Est-il possible de mettre à jour 3 lignes de SQL dans 1 instruction SQL mise à jour

id   Order 
======== ========= 
1    4 
2    3 
3    5 
4    1 
5    2 

Est-il possible de mettre à jour plusieurs lignes dans une instruction de 1 SQL? , c'est-à-dire que je souhaite mettre à jour id = 3, order = 1 et id = 5, order = 4 et id = 1, order = 1

Je sais comment faire cela dans 3 instructions de mise à jour. Mais je voudrais savoir si je peux mettre à jour 3 lignes dans 1 déclaration de mise à jour SQL.

Merci.

Répondre

0

Vous pouvez utiliser CASE si votre SGBD le prend en charge.

1

Essayez quelque chose comme ceci:

update Orders 
set 
    Order = (
    case 
     when id = 3 then 1 
     when id = 5 then 4 
     when id = 1 then 1 
    end 
where id in (3, 5, 1) 

dépend de votre base de données bien.

5

Vous pouvez le faire avec une seule instruction UPDATE, mais je ne voudrais pas déranger.

Il est plus logique d'utiliser trois mises à jour distinctes dans cette situation. Essayer de le faire avec une seule déclaration rend votre code moins lisible et plus sujet aux erreurs.

Mais si vous voulez vraiment la seule déclaration, ici vous allez:

UPDATE your_table 
SET order = CASE id 
       WHEN 3 THEN 1 
       WHEN 5 THEN 4 
       WHEN 1 THEN 1 
      END 
WHERE id IN (3, 5, 1) 
3

Pourquoi voulez-vous mettre à jour trois lignes dans une instruction?

Si les lignes doivent tous être synchronisés entre eux, vous pouvez le faire:

BEGIN TRANSACTION; 
UPDATE... ; 
UPDATE... ; 
UPDATE... ; 
COMMIT 

De cette façon, tout le travail entre le début et commettre, est soit tout terminé ou rien de tout cela est fait. C'est une caractéristique clé des bases de données relationnelles basées sur SQL. Même SQLITE a cette capacité.

+0

Droite. À moins d'aller plus loin dans le trou du lapin et de découvrir que ces deux choses ne sont pas nécessairement identiques. Voir les niveaux d'isolation des transactions. –

Questions connexes