sql >> Databasteknik >  >> RDS >> Mysql

sql sammanfoga tabeller där 1 kolumn har kommatecken

Du borde verkligen titta på Databasnormalisering och normalisera först din struktur genom att lägga till en korsningstabell och håller en relation från tablec varje relation lagrad i tablec kommer att lagras i en ny korsningstabell men inte som kommaseparerad lista varje rad kommer att innehålla id för c och ett användar-id per rad, om du kan inte ändra ditt schema kan du använda find_in_set för att hitta värden i set

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

Se demo

Redigera för normaliseringsschema

Jag har tagit bort userids kolumn från din tblC och istället har jag skapat en ny korsningstabell som tblC_user med 2 kolumner c_id detta kommer att relateras till id-kolumnen för tblC och den andra userid för att lagra användarrelationer för tblC se exempelschema 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');

Och här är din korsningstabell som 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');

Ovan om du märker att jag inte har lagrat några kommaseparerade relationer för varje användarrelation för tblC lagras i ny rad, för din berörda resultatuppsättning har jag använt junction-tabellen i join också ny fråga kommer att se ut som nedan

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

Nu kan ovanstående fråga optimeras genom att använda index, du kan enkelt upprätthålla kaskadrelationer




  1. MySQL - Villkorligt COUNT med GROUP BY

  2. Extrahera alla värden från json i sql-tabellen

  3. anropar en mysql-funktion som returnerar varchar i viloläge

  4. Hur beräknar man retentionsgrad i SQL?