Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL:campo de atualização com concat de vários campos


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

não afeta uma linha, a única explicação seria que a tabela está vazia. Ele atualizaria todas as linhas da tabela. Mas se uma das colunas for NULL, sua coluna field1 também será NULL.
Para evitar isso, você deve usar a função COALESCE(). Esta função retorna o primeiro de seus parâmetros que não é NULL.
UPDATE tabex SET field1=CONCAT(COALESCE(tabex.a1, ''),', ',...);

Em uma nota lateral eu tenho que perguntar, por que você quer fazer isso. Valores separados por vírgulas em colunas são uma má ideia na maioria das vezes.

E, finalmente, sua consulta usando CONCAT_WS() está errada. O _WS no nome da função é a abreviação de "com separador", então o primeiro parâmetro é o separador que é colocado entre os outros parâmetros da função. Então você deve escrever assim:
UPDATE tabex SET field1=CONCAT_WS(',', tabex.a1, tabex.a2, tabex.a3,...);

Outra vantagem da função CONCAT_WS() é que ela ignora valores NULL. Leia mais sobre as duas funções no manual .