2017-05-04 104 views
0

我有一個問題,起初對我來說似乎很簡單,但我對SQL相對較新,但無法解決問題。SQL查詢從密鑰連接的兩行中獲取數據

我有兩個表:'申請人'和'家庭單位'。

申請人:

ApplicantID | FirstName 
----------- | ---------- 
1   | John 
2   | Mary 

家庭單位:

ApplicantID | UnitID| Note 
1   | 10 | Member 
2   | 10 | Mother 

我需要在一個表申請人姓名和母親名字帶來。
母親申請者ID應該通過在同一個表中的家庭單位表和母親筆記中具有相同的UnitID來確定(以及他們在此不相關的其他細節)。
我嘗試此查詢:
enter image description here

這顯然是行不通的正確,我收到申請人的名字,而不是申請人的母親的名字。
需要你的幫助,鏈接文章和解釋也將是偉大的,因爲我覺得我失去了一些非常基本的東西。

+0

然後呢,這裏是你期望的輸出? –

+0

我需要得到申請人姓名和母親姓名在1行 – InnaS

+2

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits -to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表*樣式列表被替換爲ANSI - ** 92 **中的*適當的* ANSI'JOIN'語法SQL標準(** 25年**前!),其使用不鼓勵 –

回答

1
; with cte as 
    (
    select fu.*,a.name from 
    FamilyUnit fu 
    join applicant a on a.id = fu.id 
    where type = 'Mother' 
    ) 
    select a.id,a.name,c.name 
    from applicant a 
    join FamilyUnit fu on fu.id = a.id 
    join cte c on c.unit = fu.unit 
    where c.id <> a.id 
+0

非常感謝。 – InnaS

0

我不是那麼肯定,如果這是正確的:只是嘗試

select * from 
(select * from @family_units where note = 'member') as a 
left join 
    (select * from @family_units where note = 'mother') as b 
    on a.unitid = b.unitid 
left join @applicant_table as c 
on a.ApplicantID =c.ApplicantID 

測試結果:

1 10 Member 2 10 Mother 1 John