2010-06-25 103 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