2009-11-03 7 views
0

J'ai 3 tables - articles, Props, Items_To_Propsavec JOIN SQL Server 2000

je dois retourner tous les éléments qui correspondent à toutes les propriétés que j'envoyer exemple

items 
1 
2 
3 
4 

props 
T1 
T2 
T3 

items_to_props 
1 T1 
1 T2 
1 T3 
2 T1 
3 T1 

quand je envoyer T1, T2 je dois obtenir seulement l'article 1

Répondre

0
SELECT T.itemId 
    FROM (SELECT itemId, count(distinct prop) propCount 
      FROM items_to_props 
     WHERE prop in ('T1', 'T2') 
     GROUP BY itemId) T 
WHERE T.propCount = 2 

Si vous ne savez pas combien d'accessoires que vous avez, vous pouvez créer une table temporaire #P(prop), remplir avec vos accessoires et exécuter la requête que vous avez choisi (fera la même chose):

SELECT T.itemId 
    FROM (SELECT i.itemId, count(distinct p.prop) propCount 
      FROM items_to_props i 
      JOIN #P p on i.prop = p.prop 
     GROUP BY i.itemId) T 
WHERE T.propCount = (SELECT COUNT(DISTINCT prop) FROM #P) 
+0

mais je ne sais pas combien d'accessoires J'ai – eyalb

+0

Tnx. ça marche bien – eyalb

0

Il est correct que vous obtenez seulement une ligne pour T2, vous devriez obtenir 3 pour T1

+0

Je sais que c'est faux, mais je ne sais pas comment obtenir 1 ligne avec l'élément qui a les 2 prpos – eyalb