Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL:Cập nhật trường với sự kết hợp của nhiều trường

Khi truy vấn này

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

không ảnh hưởng đến một hàng, lời giải thích duy nhất sẽ là, bảng trống. Nó sẽ cập nhật mọi hàng trong bảng. Nhưng nếu một trong các cột là NULL, cột field1 của bạn cũng sẽ là NULL.
Để tránh điều đó, bạn phải sử dụng hàm COALESCE (). Hàm này trả về tham số đầu tiên của nó không phải là NULL.

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

Trên một chú thích, tôi phải hỏi, tại sao bạn muốn làm điều này. Hầu hết các giá trị được phân tách bằng dấu phẩy trong các cột là một ý tưởng tồi.

Và cuối cùng, truy vấn của bạn sử dụng CONCAT_WS () là sai. _WS trong tên hàm là viết tắt của "với dấu phân tách", vì vậy tham số đầu tiên là dấu phân cách, sau đó được đặt giữa các tham số khác của hàm. Vì vậy, bạn nên viết nó như thế này:

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

Một ưu điểm khác của hàm CONCAT_WS () là nó bỏ qua các giá trị NULL. Đọc thêm về hai chức năng trong hướng dẫn sử dụng .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới hạn kết quả từ bảng đã tham gia thành một hàng

  2. Emacs và MySQL trên Mac

  3. Độ dài tối đa cho văn bản kiểu MySQL

  4. Thay đổi khóa chính MySQL khi tồn tại các đối chiếu khóa ngoại

  5. Cách hiển thị đối chiếu máy chủ trong MySQL