sql >> Databáze >  >> RDS >> Mysql

sql spojují tabulky, kde 1 sloupec má čárku

Opravdu byste se měli podívat na normalizaci databáze a nejprve normalizujte svou strukturu přidáním spojovací tabulky a uchovávání vztahu z tabulky, každý vztah uložený v tabulce bude uložen v nové spojovací tabulce, ale ne jako seznam oddělený čárkami, každý řádek bude obsahovat id c a jedno uživatelské ID na řádek, pokud nemůžete změnit své schéma, můžete použít find_in_set najít hodnoty v set

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

Zobrazit ukázku

Upravit pro normalizaci schématu

Odebral jsem userids sloupec z vašeho tblC a místo toho jsem vytvořil novou spojovací tabulku jako tblC_user se 2 sloupci c_id to bude souviset se sloupcem id tblC a druhý userid k ukládání uživatelů vztahů s uživateli pro tblC viz vzorové schéma pro 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');

A zde je vaše spojovací tabulka jako 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');

Pokud si všimnete výše, neuložil jsem žádné vztahy oddělené čárkami pro každý vztah uživatele pro tblC je uložen v novém řádku, pro vás dotčenou sadu výsledků jsem ve spojení použil spojovací tabulku také nový dotaz bude jako níže

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"

Ukázka 2

Nyní lze výše uvedený dotaz optimalizovat pomocí indexů a snadno udržovat kaskádové vztahy




  1. Zjistěte nejoblíbenější slova v MySQL / PHP

  2. Jaký je přesně rozdíl mezi primárním indexem a sekundárním indexem?

  3. Mysql vytvořit databázi s novým umístěním databáze

  4. Jak oříznout řetězec v SQL Server před rokem 2017?