2013-10-31 106 views
0

我的表結構具有可通過回被映射到標識表中創建一個層次結構可爲空ID字段的ParentId。 ParentId是可空的。我希望能夠獲得父數據的Id,並且我想要Parent爲null的所有數據。但是,我不希望Parent不爲null的行返回2倍。加入並排除

我可以使用哪些類型的加入爲這個?

下面是什麼想讓其返回我的例子:

Id 1 ParentId 2 -> ID 2 ParentId Null 
Id 3 ParentId Null -> NULL 

注意,如果的ParentId有一個ID,然後我不希望它返回一個行,但跳過。以下內容不正確,因爲Id 2包含兩次。它應該只包含在右側,而不是作爲左側的項目。

Id 1 ParentId 2 -> ID 2 ParentId Null 
Id 2 ParentId Null 
Id 3 ParentId Null 

回答

0

這是你要找的嗎?

SELECT t.ID, t.thingName, t.parentID, pt.thingName as parentName 
FROM things t 
LEFT JOIN things pt on pt.id = t.parentID 

我在SQL小提琴上設置了一個例子(link)。

更新:更改爲左加入,以便沒有父母的記錄仍然顯示。按照您的要求,parentID不爲NULL的行只會返回一次。如果這仍然不是你想要的,請澄清。

+0

好吧,我不希望任何行返回兩次。所以,如果一行是父行,那麼我不希望該行作爲子行返回。 –

+0

我相信我提供的示例查詢符合您的要求,不是嗎? – Scott

+0

不,因爲它包含已經附加到子行的父行。它不應該返回包含在正確連接中的左側行。 –