2010-01-20 5 views
1

J'ai une table de base de données avec une colonne nommée en vedette qui est utilisé pour mettre en évidence le contenu vedette sur une page. À l'heure actuelle, j'utilise deux instructions SQL pour basculer les lignes en vedette on/off comme ceci:MySQL conditionnel UPDATE en utilisant IN

-- Reset everything to non-featured 
UPDATE tbl SET featured = '0'; 

-- Now set the selected rows as featured. 
UPDATE tbl SET featured = '1' WHERE id IN (4, 10, 21); 

Est-il possible de combiner ces deux dans une déclaration?

Répondre

4

Utilisation:

UPDATE tbl SET featured = id IN (4, 10, 21); 

[EDIT]

@OMG Ponies:

qui fonctionne, vous pouvez tirer profit du fait que les conditions booléennes dans Mysql peuvent être directement mis en correspondance entier.

à Postgresql, vous devez le faire, le besoin de lancer le booléen en entier:

update tbl set featured = (id in ('b','d'))::int 
+1

Cool. L'OP a les nombres entre guillemets simples, il suffit de lancer/convertir si nécessaire. –

+0

en effet, l'auto-conversion serait un coup de performance si vous n'avez pas explicitement cast/convert – bernie

7

Utilisation:

UPDATE tbl 
    SET featured = CASE 
        WHEN id IN (4, 10, 21) THEN '1' 
        ELSE '0' 
        END; 
+0

Merci beaucoup –

-3

Oui, vous pouvez combiner ces deux dans une déclaration.

+0

Bien que cela puisse littéralement répondre à la question posée, je ne crois pas que ce soit un utile réponse. La question implicite est "comment une seule déclaration peut-elle être construite pour faire cela?" – ddc0660

+0

@jigs: Personne n'aime un alec intelligent. –

+0

MISE À JOUR Activité SET Activity.Charges = 10 OERE (Activité. [ID activité]) In (2,3,4); Ceci est un exemple qui fonctionne. – JHK