Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL:Aktualisieren Sie das Feld mit der Verkettung mehrerer Felder

Wenn diese Abfrage

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

wirkt sich nicht auf eine Zeile aus, die einzige Erklärung wäre, dass die Tabelle leer ist. Es würde jede Zeile in der Tabelle aktualisieren. Aber wenn eine der Spalten NULL ist, wird Ihre Feld1-Spalte auch NULL sein.
Um das zu vermeiden, müssen Sie die Funktion COALESCE() verwenden. Diese Funktion gibt den ersten ihrer Parameter zurück, der nicht NULL ist.

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

Am Rande muss ich fragen, warum Sie das tun wollen. Durch Kommas getrennte Werte in Spalten sind meistens eine schlechte Idee.

Und schließlich ist Ihre Abfrage mit CONCAT_WS() falsch. Das _WS im Funktionsnamen ist die Abkürzung für „mit Trennzeichen“, also ist der erste Parameter das Trennzeichen, das dann zwischen die anderen Parameter der Funktion gesetzt wird. Sie sollten es also so schreiben:

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

Ein weiterer Vorteil der Funktion CONCAT_WS() ist, dass sie NULL-Werte ignoriert. Lesen Sie mehr über die beiden Funktionen im Handbuch .