Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL menggabungkan baris duplikat dan menggabungkan nilai yang berbeda

Praktik buruk untuk menggunakan daftar yang dipisahkan koma. Anda dapat membaca dokumentasi tentang normalisasi basis data.

Daftar yang dipisahkan koma memiliki banyak masalah praktis :

  • Tidak dapat memastikan bahwa setiap nilai adalah tipe data yang benar:tidak ada cara untuk mencegah 1,2,3,pisang,5
  • Tidak dapat menggunakan batasan kunci asing untuk menautkan nilai ke tabel pencarian; tidak ada cara untuk menerapkan integritas referensial.
  • Tidak dapat menegakkan keunikan:tidak ada cara untuk mencegah 1,2,3,3,3,5
  • Tidak dapat menghapus nilai dari daftar tanpa mengambil seluruh daftar.
  • Tidak dapat menyimpan daftar lebih panjang dari yang muat di kolom string.
  • Sulit untuk mencari semua entitas dengan nilai tertentu dalam daftar; Anda harus menggunakan pemindaian tabel yang tidak efisien. Mungkin harus menggunakan ekspresi reguler, misalnya di MySQL:idlist REGEXP '[[:<:]]2[[:>:]]'
  • Sulit menghitung elemen dalam daftar, atau melakukan kueri agregat lainnya.
  • Sulit untuk menggabungkan nilai ke tabel pencarian yang dirujuk.
  • Sulit untuk mengambil daftar dalam urutan yang diurutkan.
  • Menyimpan bilangan bulat sebagai string membutuhkan ruang sekitar dua kali lebih banyak untuk menyimpan bilangan bulat biner. Belum lagi ruang yang diambil oleh koma.

Tetapi Jika Anda membutuhkannya untuk kasus apa pun, Anda dapat menggunakan sesuatu seperti itu:

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

Selengkapnya tentang Daftar yang dipisahkan koma




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL JOIN Multiple Joins di tabel yang sama?

  2. Pustaka tidak dimuat:kesalahan libmysqlclient.16.dylib saat mencoba menjalankan 'rails server' di OS X 10.6 dengan permata mysql2

  3. Peringkat Pembaruan MySQL Sederhana dengan Ties

  4. Konektor MySQL C++ Simbol eksternal yang belum terselesaikan _get_driver_instance

  5. Optimalkan kueri peringkat lambat