帮助复杂SQL查询

时间:2010-06-25 18:28:09

标签: sql sql-server-2008 many-to-many

在SQL查询方面,我仍然是新手,所以我希望有人可以伸出援助之手。

假设我有3个表,技能,设置和联系人,以及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?

谢谢。

1 个答案:

答案 0 :(得分: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)