sql >> Database >  >> RDS >> Mysql

MYSQL:veld bijwerken met concat van meerdere velden

Wanneer deze vraag

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

geen invloed heeft op een rij, de enige verklaring zou zijn dat de tabel leeg is. Het zou elke rij in de tabel bijwerken. Maar als een van de kolommen NULL is, is uw veld1 kolom ook NULL.
Om dat te voorkomen, moet u de functie COALESCE() gebruiken. Deze functie retourneert de eerste van zijn parameters die niet NULL is.

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

Even terzijde, ik moet vragen waarom je dit wilt doen. Door komma's gescheiden waarden in kolommen zijn meestal een slecht idee.

En tot slot is uw zoekopdracht met CONCAT_WS() verkeerd. De _WS in de functienaam is een afkorting voor "met scheidingsteken", dus de eerste parameter is het scheidingsteken dat vervolgens tussen de andere parameters van de functie wordt geplaatst. Dus je zou het zo moeten schrijven:

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

Een ander voordeel van de functie CONCAT_WS() is dat deze NULL-waarden negeert. Lees meer over de twee functies in de handleiding .




  1. Hoe UPDATE van SELECT te gebruiken in SQL Server

  2. Kun je een webservice aanroepen vanuit TSQL-code?

  3. C# Te veel verbindingen in MySQL

  4. UPPER() Functie in Oracle