sql >> Base de Datos >  >> RDS >> Mysql

sql une tablas donde 1 columna tiene coma

Realmente debería mirar Normalización de la base de datos y primero normalice su estructura agregando una tabla de unión y mantenga una relación de tablec cada relación almacenada en tablec se almacenará en la nueva tabla de unión pero no como una lista separada por comas cada fila contendrá la identificación de c y una identificación de usuario por fila, si no puede alterar su esquema, puede usar find_in_set para encontrar valores en el conjunto

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

Ver demostración

Editar para normalizar el esquema

He eliminado userids columna de su tblC y en su lugar, he creado una nueva tabla de unión como tblC_user con 2 columnas c_id esto estará relacionado con la columna de identificación de tblC y el segundo userid para almacenar usuarios de relaciones de usuario para tblC ver esquema de muestra para 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');

Y aquí está su tabla de unión como 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');

Arriba, si nota que no he almacenado ninguna relación separada por comas, cada relación de usuario para tblC se almacena en una nueva fila, para su conjunto de resultados en cuestión, he usado la tabla de unión en la unión, también la nueva consulta será como a continuación

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"

Demostración 2

Ahora, la consulta anterior se puede optimizar mediante el uso de índices, puede mantener relaciones en cascada fácilmente