sql >> Databáze >  >> RDS >> Mysql

MYSQL:Aktualizujte pole se spojením více polí

Když tento dotaz

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

neovlivňuje řádek, jediné vysvětlení by bylo, že tabulka je prázdná. Aktualizoval by každý řádek v tabulce. Ale pokud je jeden ze sloupců NULL, váš sloupec pole1 bude také NULL.
Abyste tomu zabránili, musíte použít funkci COALESCE(). Tato funkce vrací první ze svých parametrů, který není NULL.

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

Na okraj se musím zeptat, proč to chcete udělat. Hodnoty oddělené čárkami ve sloupcích jsou většinou špatný nápad.

A konečně, váš dotaz pomocí CONCAT_WS() je nesprávný. _WS v názvu funkce je zkratka pro "s oddělovačem", takže první parametr je oddělovač, který je pak umístěn mezi ostatní parametry funkce. Takže byste to měli napsat takto:

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

Další výhodou funkce CONCAT_WS() je, že ignoruje hodnoty NULL. Přečtěte si více o těchto dvou funkcích v příručce .




  1. Odstraňte a omezte překrývající se období

  2. Přidání pokročilejších funkcí, jako je správa kategorií a hlasování o vláknech a příspěvcích

  3. Nejlepší nástroje pro zálohování pro PostgreSQL

  4. SQL použije sloupec z podvýběru v klauzuli where