2014-06-18 7 views
1

J'ai une donnée d'éléments dans une table appelée items_data.Joindre des tables avec des données de plusieurs catégories

Pour chaque rangée, j'ai 3 colonnes qui contiennent des étiquettes de catégories (cat1, cat2, cat3). Certains appartiennent à trois catégories, tandis que d'autres n'en contiennent qu'un seul, dont cat2 et cat3 auront une cellule vide.

Les étiquettes de catégorie sont des ID qui apparaissent dans une autre table appelée cat_label qui contient deux colonnes, une avec l'ID et une avec le nom de la catégorie. Je souhaite joindre ces deux tables pour former une nouvelle table de sorte que si l'élément appartient à deux catégories, il y aura deux lignes créées, et la sortie sera deux colonnes, une avec l'élément et celles avec sa catégorie .

Répondre

0

Utilisez UNION ALL

select a.item, b.name 
from items_data a 
join cat_label b on a.cat1 = b.id 
union all 
select a.item, b.name 
from items_data a 
join cat_label b on a.cat2 = b.id 
union all 
select a.item, b.name 
from items_data a 
join cat_label b on a.cat3 = b.id 
+0

Je pense que, dans ce cas, 'union' et 'union tous' donneront même résultats. –

+2

@VinitPrajapati, dans ce cas, UNION ALL est plus rapide car il ignore la partie déduplication – Fabricator

0
select i.cat1, c.cat_label from items_data i inner join cat_label c on i.cat1 = c.id 
union 
select i.cat2, c.cat_label from items_data i inner join cat_label c on i.cat2 = c.id 
union 
select i.cat3, c.cat_label from items_data i inner join cat_label c on i.cat3 = c.id 
Questions connexes