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

SQL hợp nhất các hàng trùng lặp và nối các giá trị khác nhau

Thực hành không tốt để sử dụng danh sách được phân tách bằng dấu phẩy. Bạn có thể đọc tài liệu về chuẩn hóa cơ sở dữ liệu.

Danh sách được phân tách bằng dấu phẩy có rất nhiều vấn đề thực tế :

  • Không thể đảm bảo rằng mỗi giá trị là loại dữ liệu phù hợp:không có cách nào toprevent 1,2,3, banana, 5
  • Không thể sử dụng các ràng buộc khóa ngoại để liên kết các giá trị với một bảng tra cứu; không có cách nào để thực thi tính toàn vẹn của tham chiếu.
  • Không thể thực thi tính duy nhất:không có cách nào để ngăn chặn 1,2,3,3,3,5
  • Không thể xóa một giá trị khỏi danh sách mà không tìm nạp toàn bộ danh sách.
  • Không thể lưu trữ danh sách dài hơn những gì phù hợp với cột chuỗi.
  • Khó tìm kiếm tất cả các thực thể có giá trị nhất định trong danh sách; bạn phải sử dụng tính năng quét bảng không hiệu quả. Có thể phải sử dụng đến quy định, ví dụ:trong MySQL:idlist REGEXP '[[:<:]]2[[:>:]]'
  • Khó đếm các phần tử trong danh sách hoặc thực hiện các truy vấn tổng hợp khác.
  • Khó nối các giá trị vào bảng tra cứu mà chúng tham chiếu.
  • Khó tìm nạp danh sách theo thứ tự đã sắp xếp.
  • Lưu trữ số nguyên dưới dạng chuỗi chiếm khoảng gấp đôi dung lượng so với lưu trữ số nguyên nhị phân. Chưa kể đến khoảng trống được lấy bởi các dấu phẩy.

Nhưng nếu bạn cần Nó cho bất kỳ trường hợp nào, bạn có thể sử dụng một cái gì đó như thế:

SELECT  FilmID,
        FilmName, 
        Id = REPLACE(
                (
                SELECT DateShown AS [data()]
                FROM YourTable
                WHERE FilmID = a.FilmID
                ORDER BY FilmName FOR XML PATH('')), ' ', ','
                )
FROM    YourTable a
WHERE   FilmName IS NOT NULL
GROUP BY FilmID, FilmName

Thông tin thêm về Danh sách được phân tách bằng dấu phẩy




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn hàng gần đây nhất với GROUP BY trong MySQL

  2. Truy vấn MySQL đệ quy với đổi mới quan hệDB

  3. mysql - Tôi đã xóa bảng người dùng! làm thế nào tôi có thể khôi phục nó?

  4. Cách lấy id của một hàng tôi vừa chèn php / mysql

  5. PHP và Mysql cực kỳ cơ bản