加入并排除

时间:2013-10-31 15:32:22

标签: sql linq-to-sql

我的表结构有一个可空的ID字段ParentId,可以通过返回到表的Id来映射以创建层次结构。 ParentId可以为空。我希望能够使用父数据获取Ids,并且我希望Parent为null的所有数据。但是,我不希望Parent不为null的行返回2x。

我可以使用哪种类型的联接?

以下是我要归还的例子:

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

注意,如果ParentId有一个ID,那么我不希望它作为一行返回但是被跳过。以下是INCORRECT,因为Id 2包含两次。它应仅包含在右侧,而不是左侧的项目。

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

1 个答案:

答案 0 :(得分: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 Fiddle(link)上设置了一个示例。

更新:更改为LEFT JOIN,以便仍然显示没有父母的记录。根据您的要求,parentID不为NULL的行只会返回一次。如果这仍然不是您想要的,请澄清。