Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL:campo di aggiornamento con concat di più campi

Quando questa query

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

non interessa una riga, l'unica spiegazione sarebbe che la tabella è vuota. Aggiornerebbe ogni riga nella tabella. Ma se una delle colonne è NULL, anche la tua colonna field1 sarà NULL.
Per evitarlo, devi usare la funzione COALESCE(). Questa funzione restituisce il primo dei suoi parametri che non è NULL.

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

In una nota a margine devo chiedere, perché vuoi farlo. I valori separati da virgola nelle colonne sono una cattiva idea la maggior parte delle volte.

E infine, la tua query che utilizza CONCAT_WS() è sbagliata. _WS nel nome della funzione è l'abbreviazione di "con separatore", quindi il primo parametro è il separatore che viene poi inserito tra gli altri parametri della funzione. Quindi dovresti scriverlo in questo modo:

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

Un altro vantaggio della funzione CONCAT_WS() è che ignora i valori NULL. Maggiori informazioni sulle due funzioni nel manuale .