sql >> Databasteknik >  >> RDS >> Mysql

MYSQL:Uppdatera fält med sammansättning av flera fält

När denna fråga

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

påverkar inte en rad, den enda förklaringen skulle vara att tabellen är tom. Det skulle uppdatera varje rad i tabellen. Men om en av kolumnerna är NULL, kommer din field1-kolumn också att vara NULL.
För att undvika det måste du använda COALESCE()-funktionen. Denna funktion returnerar den första av dess parametrar som inte är NULL.

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

På en sida måste jag fråga varför du vill göra detta. Kommaseparerade värden i kolumner är oftast en dålig idé.

Och slutligen, din fråga med CONCAT_WS() är fel. _WS i funktionsnamnet är förkortning för "med separator", så den första parametern är separatorn som sedan placeras mellan funktionens andra parametrar. Så du bör skriva det så här:

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

En annan fördel med CONCAT_WS()-funktionen är att den ignorerar NULL-värden. Läs mer om de två funktionerna i manualen .




  1. PostgreSQL array_agg ordning

  2. SQL Server:Databasen har fastnat i återställningsläge

  3. Bästa sättet att lagra arbetstider och fråga dem effektivt

  4. Laravel Migrationstabell finns redan, men jag vill lägga till en ny, inte den äldre