sql >> Base de Datos >  >> RDS >> Mysql

MYSQL:campo de actualización con concatenación de múltiples campos

Cuando esta consulta

UPDATE tabex SET field1=CONCAT(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );

no afecta una fila, la única explicación sería que la tabla está vacía. Actualizaría cada fila de la tabla. Pero si una de las columnas es NULL, su columna field1 también será NULL.
Para evitar eso, debe usar la función COALESCE(). Esta función devuelve el primero de sus parámetros que no es NULL.

UPDATE tabex SET field1=CONCAT(COALESCE(tabex.a1, ''),', ',...);

En una nota al margen, tengo que preguntar, ¿por qué quieres hacer esto? Los valores separados por comas en columnas son una mala idea la mayoría de las veces.

Y finalmente, su consulta usando CONCAT_WS() es incorrecta. El _WS en el nombre de la función es la abreviatura de "con separador", por lo que el primer parámetro es el separador que luego se coloca entre los otros parámetros de la función. Así que deberías escribirlo así:

UPDATE tabex SET field1=CONCAT_WS(',', tabex.a1, tabex.a2, tabex.a3,...);

Otra ventaja de la función CONCAT_WS() es que ignora los valores NULL. Lea más sobre las dos funciones en el manual .