2009-10-29 7 views
1

J'ai deux tables: 'Category' et 'Product'. Dans la catégorie I, j'ai catid et cat name. Dans la table des produits, j'ai item-id, item-name, catid. Ce que je dois faire est d'afficher un résultat qui aura item name et category name. Mais le nom de la catégorie sera multiple. Alors qu'un produit peut avoir plusieurs catégories.Requête complexe SQL

Répondre

2

Si votre schéma a un ID de catégorie dans la table des produits, alors un produit ne peut pas avoir plusieurs catégories. Si vous avez un autre tableau M: N pour lier des produits à des catégories, vous devez mettre à jour votre question.

+0

l'identifiant de la catégorie de la table des produits est comme 2,3,4 donc 1 produit peut avoir plusieurs catégories – Santanu

+3

Ok, alors vous devriez lire http://en.wikipedia.org/wiki/Database_normalization - faire cela avec une telle colonne composite va être difficile et lent. –

+0

Pouvez-vous influer sur le modèle de données, ou est-ce un fait? Parce que c'est une approche très sous-optimale pour la plupart des scénarios d'utilisation. – tijmenvdk

4

Vous pouvez créer trois tableaux, à cause d'une table de jointure à permettrait à chaque ligne d'avoir plusieurs lignes correspondant dans l'autre table:

Category  : catid catname 
Product   : itemid itemname 
CategoryProduct : catid itemid 

Ainsi, un produit peut avoir 0, 1 ou plusieurs catégories .

Exemple de contenu pour la table de jointure, pour deux produits ayant les mêmes deux catégories:

catid itemid  in CategoryProduct 
    1  3 
    1  4 
    2  3 
    2  4 
2

En réponse à votre commentaire:

La catégorie id de la table produit est comme 2 , 3,4 de sorte que 1 produit peut avoir plusieurs catégories

Si vous êtes autorisé à changer la table struc bien sûr, suivez le conseil de KLE. C'est l'approche saine et maintenable.

Si vous ne pouvez pas changer la structure de la table, vous pouvez interroger les catégories avec un hack comme celui-ci:

select * 
from product p 
inner join category c 
    on ',' + p.catid + ',' 
     like '%,' + cast(c.catid as varchar) + ',%' 
+1

Dépend de la base de données, mais par exemple dans MySQL vous pouvez faire 'ON find_in_set (c.catid, p.catid)'. –