2010-10-07 30 views
5

Tengo esta tabla en mi base de datos MySQL, 'usuarios'. Tiene los campos 'id' y 'value'.Actualizando varias filas con valores diferentes

Ahora, quiero actualizar un montón de filas en esta tabla con una sola consulta SQL , pero muchas filas deben tener un valor diferente. Actualmente, estoy usando esto:

UPDATE users 
    SET value = CASE id 
     WHEN 1 THEN 53 
     WHEN 2 THEN 65 
     WHEN 3 THEN 47 
     WHEN 4 THEN 53 
     WHEN 5 THEN 47 
    END 
WHERE id IN (1,2,3,4,5) 

Esto funciona. Pero creo que podría hacer algo de optimización ya que solo hay unos 3 o 4 valores diferentes que estoy asignando a las filas. Como puede ver, ahora estos son 47, 53 y 65. ¿Hay alguna manera de actualizar todas las filas que obtienen el mismo valor simultáneamente en la misma consulta? O, ¿hay otra forma en que pueda optimizar esto?

+2

Se puede almacenar la asignación en una mesa separada y unirse a eso. – Pointy

+1

@Pointy: ¿por qué no poner esto como una respuesta? – Benoit

+0

@Benoit porque aunque conozco SQL, no conozco MySQL y, por lo tanto, no necesariamente podría construir un ejemplo correcto. – Pointy

Respuesta

10

En lugar de hacer case variable when value then ..., trate de hacer case when condition then ... - de este modo:

UPDATE users 
    SET value = CASE 
     WHEN id in (1,4) THEN 53 
     WHEN id = 2 THEN 65 
     WHEN id in (3,5) THEN 47 
    END 
WHERE id IN (1,2,3,4,5) 
1

Me gustaría hacer esto con algunas declaraciones de ACTUALIZACIÓN diferentes.

UPDATE users 
    SET value = 53 
WHERE id = 1; 


UPDATE users 
    SET value = 65 
WHERE id = 2; 

... 

Esto parece más simple si solo tiene 5 o 6 valores para establecer en varias filas cada uno. ¿O hay alguna razón específica por la que necesitas hacer esto en una consulta?

8

Suponiendo id es único o principal ...

insert into users 
    (id,value) 
VALUES 
    (1,53),(2,65),(3,47),(4,53),(5,47) 
on duplicate key update 
value=VALUES(value) 
+0

No sé por qué esto obtuvo tan pocos votos. ¡Es perfecto! – Matmarbon

Cuestiones relacionadas