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

Bagaimana membandingkan dua daftar string yang dipisahkan koma menggunakan MySQL

Tampaknya Anda ingin melakukan persimpangan array, kecuali array Anda adalah satu kolom. Itu bisa dilakukan, tetapi akan lambat, sulit untuk di-debug dan tidak akan memanfaatkan kekuatan database relasional. Cara yang lebih baik adalah dengan mengubah skema tabel Anda menjadi seperti ini:

Grup tabel

group_id int unsigned not null auto_increment primary key,
character_list text

Tabel member_in_group

group_id int unsigned not null,
group_member varchar(45) not null

Kemudian Anda dapat menanyakan seperti ini:

SELECT group_id, character_list
FROM groups g 
  JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);

groups tabel mungkin sangat mirip dengan tabel Anda saat ini. members_in_groups tabel adalah data yang sama yang dipotong menjadi bagian-bagian yang mudah dicari.

ETA memberikan komentar Anda, ini akan berfungsi jika Anda dapat menjamin bahwa setiap character_list hanya berisi satu contoh setiap karakter:

SELECT group_id, 
       SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally, 
       character_list
FROM groups g
  JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
  HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;

Dalam hal ini HAVING klausa harus sama dengan 3 karena ada 3 anggota di IN ('Mr. T', 'Apollo', 'Rocky') .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat pemicu untuk menghapus php myadmin

  2. Menggunakan Mysqli bind_param dengan kolom tanggal dan waktu?

  3. Pilih semua kolom kecuali satu di MySQL?

  4. Pohon menu gema dengan fungsi rekursif

  5. Bagaimana cara menentukan pesanan khusus dalam klausa ORDER BY?