sql >> Database >  >> RDS >> Mysql

sql join-tabellen waarbij 1 kolom een ​​komma heeft

Je moet echt kijken naar Databasenormalisatie en normaliseer eerst uw structuur door een verbindingstabel toe te voegen en bevat een relatie van tablec elke relatie die in tablec is opgeslagen, wordt opgeslagen in een nieuwe verbindingstabel, maar niet als een door komma's gescheiden lijst, elke rij bevat de id van c en één gebruikers-id per rij, als u kan je schema niet wijzigen, je kunt find_in_set gebruiken om waarden in set te vinden

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

Bekijk demo

Bewerken om schema te normaliseren

Ik heb userids verwijderd kolom uit uw tblC en in plaats daarvan heb ik een nieuwe verbindingstabel gemaakt als tblC_user met 2 kolommen c_id dit heeft betrekking op de id-kolom van tblC en de tweede userid om gebruikersrelaties op te slaan voor tblC zie voorbeeldschema voor 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');

En hier is uw verbindingstabel 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');

In het bovenstaande, als je merkt dat ik geen door komma's gescheiden relaties heb opgeslagen, elke relatie van gebruiker voor tblC wordt opgeslagen in een nieuwe rij, voor de betreffende resultatenset heb ik de verbindingstabel gebruikt in de join, ook zal de nieuwe query zijn zoals hieronder

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

Bovenstaande query kan nu worden geoptimaliseerd door gebruik te maken van indexen waarmee u gemakkelijk trapsgewijze relaties kunt onderhouden




  1. bestaande records bijwerken met een uniek geheel getal

  2. Selecteer X-lijnen beginnend bij regel Y

  3. Voorbeelden van het converteren van 'date' naar 'datetimeoffset' in SQL Server (T-SQL)

  4. Best practice voor het maken van SQL SELECT-query's terwijl mogelijke ongedefinieerde waarden worden verwerkt