optimizar lentas else ejemplo consultas mysql sql case

lentas - mysql select if else



MySQL CASE para actualizar mĂșltiples columnas (3)

No conozco ninguna forma limpia de hacer lo que me estás pidiendo. Una actualización válida de SQL equivalente sería:

UPDATE tablename SET col1 = CASE name WHEN ''name1'' THEN 5 WHEN ''name2'' THEN 3 ELSE 0 END, col2 = CASE name WHEN ''name1'' THEN '''' WHEN ''name2'' THEN ''whatever'' ELSE '''' END;

Por supuesto, esto no es bonito y requiere repetir los mismos casos (por ejemplo, ''name1'' ) varias veces, pero no creo que sea posible de otra manera.

Me gustaría actualizar varias columnas en mi tabla usando una declaración de caso, pero no puedo encontrar la forma de hacerlo (incluso es posible) Se me ocurrió la siguiente consulta de referencia no válida:

UPDATE tablename SET CASE name WHEN ''name1'' THEN col1=5,col2='''' WHEN ''name2'' THEN col1=3,col2=''whatever'' ELSE col1=0,col2='''' END;

¿Hay alguna manera de lograr el resultado esperado con SQL válido?


Si el name tiene un índice único y se sabe que sus valores existen en la tabla, puede usar este truco:

INSERT INTO tablename (name, col1, col2) VALUES (''name1'', 5, '''') , (''name2'', 3, ''whatever'') ON DUPLICATE KEY UPDATE col1 = VALUES(col1) , col2 = VALUES(col2);

Si hay columnas NOT NULL adicionales sin un valor predeterminado, tendrá que agregar valores ficticios para esas. Solo déjalos fuera de la ON DUPLICATE KEY UPDATE y serán ignorados.


UPDATE tablename SET col1 = CASE WHEN name = ''name1'' THEN 5 WHEN name = ''name2'' THEN 3 ELSE 0 END , col2 = CASE WHEN name = ''name1'' THEN '''' WHEN name = ''name2'' THEN ''whatever'' ELSE '''' END ;