Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL:Zaktualizuj pole za pomocą połączenia wielu pól

Kiedy to zapytanie

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

nie wpływa na wiersz, jedynym wyjaśnieniem byłoby to, że tabela jest pusta. Zaktualizuje każdy wiersz w tabeli. Ale jeśli jedna z kolumn ma wartość NULL, Twoja kolumna field1 również będzie miała wartość NULL.
Aby tego uniknąć, musisz użyć funkcji COALESCE(). Ta funkcja zwraca pierwszy ze swoich parametrów, który nie jest NULL.

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

Na marginesie muszę zapytać, dlaczego chcesz to zrobić. Wartości oddzielone przecinkami w kolumnach są przez większość czasu złym pomysłem.

I na koniec, twoje zapytanie używające CONCAT_WS() jest błędne. _WS w nazwie funkcji jest skrótem od "z separatorem", więc pierwszym parametrem jest separator, który jest następnie umieszczany między innymi parametrami funkcji. Powinieneś więc napisać to tak:

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

Kolejną zaletą funkcji CONCAT_WS() jest to, że ignoruje ona wartości NULL. Przeczytaj więcej o tych dwóch funkcjach w podręczniku .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przechowywać wiele opcji w jednej tabeli?

  2. Pobierz najnowszy wiersz z grupowaniem według i Laravel

  3. Jak mogę zmienić prefiksy we wszystkich tabelach w mojej bazie danych MySQL?

  4. Dynamiczne nazwy tabel w funkcji procedury składowanej

  5. Wybór ostatnich 7 dni z Now() w MYSQL