如何根据同一个表中的父子关系对数据表进行排序

时间:2013-12-20 13:39:58

标签: sql select parent-child

我有如下表格

ID |CODE      | Description
--------------------------
1  |A         | Parent Test
2  |A.1       | First Level Child
3  |A.2       | First Level Child 2
4  |A.1.1     | Second Level Child

我想做一个Select并得到如下表格

ID |PARENT ID |CODE      | Description
---------------------------------------
1  | 0        |A         | Parent Test
2  | 1        |A.1       | First Level Child
3  | 1        |A.2       | First Level Child 2
4  | 2        |A.1.1     | Second Level Child

是否可以使用SQL SELECT语句从顶层表中获取预期的数据表?我不想在C#中这样做,因此我必须在SQL中执行它

1 个答案:

答案 0 :(得分:1)

这样做需要一些字符串操作,这些操作不一定是SQL方言的标准。你需要在孩子和父母之间进行连接,这样孩子才能拥有一个“。”。在父代码之后。

这是一个标准的例子:SQL:

select child.id, parent.id, child.code, child.description
from t child join
     t parent
     on child.code like concat(parent.code, '.%') and
        child.code not like concat(parent.code, '.%.%');

编辑:

要获取第一行,请使用left outer join

select child.id, parent.id, child.code, child.description
from t child left outer join
     t parent
     on child.code like concat(parent.code, '.%') and
        child.code not like concat(parent.code, '.%.%');