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

sql bergabung dengan tabel di mana 1 kolom memiliki koma

Anda harus benar-benar melihat Normalisasi basis data dan pertama-tama normalkan struktur Anda dengan menambahkan tabel persimpangan dan menyimpan relasi dari tablec setiap relasi yang disimpan di tablec akan disimpan di tabel persimpangan baru tetapi tidak sebagai daftar yang dipisahkan koma, setiap baris akan menyimpan id c dan satu id pengguna per baris, jika Anda tidak dapat mengubah skema Anda, Anda dapat menggunakan find_in_set untuk menemukan nilai dalam set

select *  
from  tblC c
JOIN tblB b
ON (find_in_set(b.userid,c.userids) > 0)
where c.nname="new1"

Lihat demo

Edit untuk menormalkan skema

Saya telah menghapus userids kolom dari tblC . Anda dan sebagai gantinya saya telah membuat tabel persimpangan baru sebagai tblC_user dengan 2 kolom c_id ini akan terkait dengan kolom id tblC dan yang kedua userids untuk menyimpan pengguna hubungan pengguna untuk tblC lihat contoh skema untuk tblC

CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
nname varchar(255),
 PRIMARY KEY (id)
);

INSERT INTO tblC (id, nname) VALUES
('1', 'new1'),
('2', 'new2'),
('3', 'new3'),
('4', 'new4'),
('5', 'new5');

Dan inilah tabel persimpangan Anda sebagai tblC_user

CREATE TABLE if not exists tblC_user
(
 c_id int,
 userid int
);

INSERT INTO tblC_user (c_id,userid) VALUES
('1','1'),
('1','2'),
('2','1'),
('2','3'),
('3','1'),
('3','4'),
('4','3'),
('4','2'),
('5','5'),
('5','2');

Di atas jika Anda perhatikan saya belum menyimpan hubungan yang dipisahkan koma, setiap hubungan pengguna untuk tblC disimpan di baris baru, untuk Anda yang bersangkutan, set hasil saya telah menggunakan tabel persimpangan di gabung juga permintaan baru akan seperti di bawah ini

select *  
from  tblC c
join tblC_user cu on(c.id = cu.c_id)
join tblB b on (b.userid = cu.userid)
where c.nname="new1"

Demo 2

Sekarang kueri di atas dapat dioptimalkan dengan menggunakan indeks, Anda dapat mempertahankan hubungan berjenjang dengan mudah




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan DECIMAL ke dalam database MySQL

  2. Jabat tangan yang buruk atau ECONNRESET Azure Mysql Nodejs

  3. PHP / PDO :SQl untuk menemukan baris yang berisi nilai string

  4. Cara Mengamankan Cluster Galera - 8 Tips

  5. Bagaimana cara merekam waktu eksekusi menjalankan pernyataan sql yang disimpan dalam file?