Mysql
 sql >> Base de données >  >> RDS >> Mysql

sql join tables où 1 colonne a une virgule

Vous devriez vraiment regarder Normalisation de la base de données et normalisez d'abord votre structure en ajoutant une table de jonction et contient une relation de tablec chaque relation stockée dans tablec sera stockée dans une nouvelle table de jonction mais pas en tant que liste séparée par des virgules chaque ligne contiendra l'identifiant de c et un identifiant d'utilisateur par ligne, si vous ne peut pas modifier votre schéma, vous pouvez utiliser find_in_set pour trouver des valeurs dans un ensemble

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

Voir la démo

Modifier pour normaliser le schéma

J'ai supprimé les userids colonne de votre tblC et à la place j'ai créé une nouvelle table de jonction en tant que tblC_user avec 2 colonnes c_id cela sera lié à la colonne id de tblC et le second userid pour stocker les utilisateurs des relations utilisateur pour tblC voir exemple de schéma pour 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');

Et voici votre table de jonction en tant que 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');

Ci-dessus, si vous remarquez que je n'ai pas stocké de relations séparées par des virgules, chaque relation d'utilisateur pour tblC est stocké dans une nouvelle ligne, pour vous l'ensemble de résultats concerné, j'ai utilisé la table de jonction dans la jointure, la nouvelle requête sera comme ci-dessous

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"

Démo 2

Maintenant, la requête ci-dessus peut être optimisée en utilisant des index, vous pouvez facilement maintenir des relations en cascade