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
;