2011-10-13 100 views
9

Soy nuevo en MySQL.Actualizar varias filas con valores diferentes en una sola consulta - MySQL

estoy usando esto para actualizar varias filas con diferentes valores, en una sola consulta:

UPDATE categories 
    SET order = CASE id 
     WHEN 1 THEN 3 
     WHEN 2 THEN 4 
     WHEN 3 THEN 5 
    END, 
    title = CASE id 
     WHEN 1 THEN 'New Title 1' 
     WHEN 2 THEN 'New Title 2' 
     WHEN 3 THEN 'New Title 3' 
    END 
WHERE id IN (1,2,3) 

estoy usando "WHERE" para mejorar el rendimiento (y sin que cada fila de la tabla sería probado).

Pero lo que si tengo este senario (cuando no quiero actualizar el título de ID 2 y 3):

UPDATE categories 
    SET order = CASE id 
     WHEN 1 THEN 3 
     WHEN 2 THEN 4 
     WHEN 3 THEN 5 
    END, 
    title = CASE id 
     WHEN 1 THEN 'New Title 1' 
    END 
WHERE id IN (1,2,3) 

El código anterior para cambiar el título Identificación del 2 y 3 en "NULL" ...

¿Cuál es la forma correcta de realizar la consulta, pero omita actualizar el título para los identificadores 2 y 3 y aún así mantener el rendimiento "WHERE id IN"?

Tal como este conjunto de títulos

UPDATE categories 
    SET order = CASE id 
     WHEN 1 THEN 3 
     WHEN 2 THEN 4 
     WHEN 3 THEN 5 
    END, 
    title = CASE id 
     WHEN 1 THEN 'New Title 1' 
     WHEN THEN 
     WHEN THEN 
    END 
WHERE id IN (1,2,3) 

Respuesta

12

igual a sí mismo cuando no se desea actualizar a un valor diferente.

UPDATE categories 
    SET order = CASE id 
     WHEN 1 THEN 3 
     WHEN 2 THEN 4 
     WHEN 3 THEN 5 
    END, 
    title = CASE id 
     WHEN 1 THEN 'New Title 1' 
     ELSE title 
    END 
WHERE id IN (1,2,3) 
0
UPDATE `table_name` SET `field_name1` = CASE `id` 
WHEN '1' THEN 'value_1' 
WHEN '2' THEN 'value_2' 
WHEN '3' THEN 'value_3' 
ELSE `field_name1` 
END, 
`field_name2`= CASE id 
WHEN '1' THEN 'value_1' 
WHEN '2' THEN 'value_2' 
WHEN '3' THEN 'value_3' 
ELSE `field_name2` 
END 
Cuestiones relacionadas