2010-06-25 88 views
1

对于SQL查询,我仍然是新手,所以我希望有人能帮我一把。有关复杂SQL查询的帮助

假设我有3个表,Skill,Set和Contact,以及2个连接表,SkillSet和ContactSet。 (3个表有正在使用作为主键的“ID”栏)

联系人可以具有任何数量的组,并且反之亦然(多到多)

集可以具有任何数量的(也是多对多)

我想要的是,如果有技能ID,每个联系人都会返回一个包含该技能的集合。

还在我身边吗?

这里是我到目前为止有:

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? 

谢谢。

回答

0

这应该只是罚款或者至少导致你最终的解决方案,你只需要一个查询:

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可能是有用的(取决于数据) – devio 2010-06-25 18:39:54