2010-06-25 5 views
1

Je suis toujours un néophyte en ce qui concerne les requêtes SQL, alors j'espérais que quelqu'un pourrait me prêter main-forte. Supposons que j'ai 3 tables, compétence, ensemble et contact, et 2 tables de liaison, SkillSet et ContactSet. (Les 3 tables ont une colonne « ID » qui est utilisé comme clé primaire)Aide avec la requête SQL complexe

Les contacts peuvent avoir un certain nombre d'ensembles, et vice versa (many-to-many)

Les ensembles peuvent avoir un nombre quelconque de compétences, et vice-versa (également plusieurs-à-plusieurs)

Ce que je veux, c'est quand on présente l'ID d'une compétence, de renvoyer chaque contact avec un ensemble contenant cette compétence.

Toujours oui?

Voici ce que j'ai jusqu'à présent:

SELECT  Set.ID as expr1 
FROM SkillSet 
WHERE Skill.ID = @SkillID 
//this selects every set containing the Skill. 


SELECT   Contact.ID 
FROM   ContactSet 
WHERE SET.ID = ? 
//this is where I run into problems. I want to use the records returned from 
//the previous SELECT query (expr1) but I'm unsure how. 
//Would it be expr1.ID or expr1.Set.ID? 

Merci.

Répondre

0

cela devrait fonctionner très bien ou au moins vous conduire à la solution finale, il vous suffit d'une requête:

declare @skillid int 
set @skillid = 1 

SELECT C.* 
    FROM contact c 
    inner join SetContact SC on (sc.contactId = C.contactId) 
    inner join SkillSet SS on (ss.SetId = SC.SetId) 
    WHERE (SS.SkillId = @SkillId) 
+1

SELECT DISTINCT peut être utile (en fonction des données) – devio