sql >> Database teknologi >  >> RDS >> Mysql

sql join tabeller, hvor 1 kolonne har komma

Du bør virkelig se på Databasenormalisering og normaliser først din struktur ved at tilføje en forbindelsestabel og beholder en relation fra tablec, hver relation gemt i tablec vil blive gemt i en ny forbindelsestabel, men ikke som kommasepareret liste, hver række vil indeholde id af c og et bruger-id pr. række, hvis du kan ikke ændre dit skema, du kan bruge find_in_set for at finde værdier i sæt

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

Se demo

Rediger til normaliseringsskema

Jeg har fjernet userids kolonne fra din tblC og i stedet har jeg oprettet en ny junction-tabel som tblC_user med 2 kolonner c_id dette vil relatere til id-kolonnen i tblC og en anden userid for at gemme brugerrelationsbrugere for tblC se eksempelskema for 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');

Og her er din junction-tabel 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');

I ovenstående, hvis du bemærker, at jeg ikke har gemt nogen kommaseparerede relationer for hver brugerrelation for tblC er gemt i en ny række, for dit berørte resultatsæt har jeg brugt junction table i join også ny forespørgsel vil være som nedenfor

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 ovenstående forespørgsel optimeres ved at bruge indekser, du kan nemt vedligeholde kaskaderelationer




  1. Sådan håndteres null-feltet ved eksport af MYSQL-tabeller til CSV

  2. Hvordan vælger jeg betinget et felt fra en af ​​to tabeller?

  3. Azure SQL Database-ydeevne og serviceniveauer forklaret

  4. Opret en tabel med to typer i PostgreSQL