Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL :Champ de mise à jour avec concat de plusieurs champs

Lorsque cette requête

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

n'affecte pas une ligne, la seule explication serait que la table est vide. Il mettrait à jour chaque ligne du tableau. Mais si l'une des colonnes est NULL, votre colonne field1 sera également NULL.
Pour éviter cela, vous devez utiliser la fonction COALESCE(). Cette fonction retourne le premier de ses paramètres qui n'est pas NULL.

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

En passant, je dois vous demander pourquoi vous voulez faire cela. Les valeurs séparées par des virgules dans les colonnes sont une mauvaise idée la plupart du temps.

Et enfin, votre requête utilisant CONCAT_WS() est erronée. Le _WS dans le nom de la fonction est l'abréviation de "avec séparateur", donc le premier paramètre est le séparateur qui est ensuite placé entre les autres paramètres de la fonction. Vous devriez donc l'écrire comme ceci :

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

Un autre avantage de la fonction CONCAT_WS() est qu'elle ignore les valeurs NULL. En savoir plus sur les deux fonctions dans le manuel .