0

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

我可以为此使用什么类型的联接?

以下是我想要返回的示例:

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
4

1 回答 1

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 (链接)上设置了一个示例。

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

于 2013-10-31T15:49:21.923 回答