Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL Join-Tabellen, bei denen 1 Spalte ein Komma hat

Sie sollten sich unbedingt Datenbanknormalisierung ansehen und normalisieren Sie zuerst Ihre Struktur, indem Sie eine Verbindungstabelle hinzufügen und eine Beziehung aus tablec enthält. Jede in tablec gespeicherte Beziehung wird in einer neuen Verbindungstabelle gespeichert, jedoch nicht als kommagetrennte Liste. Jede Zeile enthält die ID von c und eine Benutzer-ID pro Zeile, wenn Sie Ihr Schema nicht ändern können, können Sie find_in_set verwenden um Werte im Satz zu finden

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

Demo ansehen

Bearbeiten für Schema normalisieren

Ich habe userids entfernt Spalte aus Ihrem tblC und stattdessen habe ich eine neue Verbindungstabelle als tblC_user erstellt mit 2 Spalten c_id Dies bezieht sich auf die ID-Spalte von tblC und zweitens eine userid Benutzerbeziehungen Benutzer für tblC zu speichern siehe Beispielschema für 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');

Und hier ist Ihre Verbindungstabelle als 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');

Wenn Sie oben bemerken, dass ich keine durch Kommas getrennten Beziehungen gespeichert habe, jede Beziehung des Benutzers für tblC wird in einer neuen Zeile gespeichert, für Sie betreffende Ergebnismenge habe ich eine Verbindungstabelle in Join verwendet, auch eine neue Abfrage wird wie unten aussehen

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

Jetzt kann die obige Abfrage optimiert werden, indem Sie Indizes verwenden, mit denen Sie einfach kaskadierende Beziehungen pflegen können