我在SQL Server中有一个数据库架构,如下所示:
http://sqlfiddle.com/#!18/dc3cf/3
| id | tag | child_id |
|---- |----- |---------- |
| 1 | A | |
| 1 | | 4 |
| 2 | C | |
| 3 | C | |
| 4 | B | |
| 4 | | 5 |
| 5 | D | |
| 5 | E | |
每个“ id”记录都可以有一个子项(存储在同一表中)。每个孩子可以有任意数量的子孩子。我不知道层次结构级别的数量,但深度可能不超过10个级别。
在示例中,有:
1
,2
,3
1
的1个孩子和1个孩子的孩子:分别为id的4
和5
我需要能够查询以获取所有id的标签(包括所有子标签)的结果。例如,根据上面的表数据,我将需要输出以下内容:
| id | tag |
|---- |----- |
| 1 | A |
| 1 | B |
| 1 | D |
| 1 | E |
| 2 | C |
| 3 | C |
| 4 | B |
| 5 | D |
| 5 | E |
请注意,我需要孩子仍然出现。
是否可以在不将表自身联接到'n'的情况下多次出现,其中'n'是层次结构级别的数目?
为澄清起见,每个id也是一个根元素。因此,唯一的知道ID是否也是孩子的方法是查看并查看ID是否在有child_id的地方有另一条记录。我制作了另一个SQL Fiddle版本来证明这一点。请注意,id 2现在有一个孩子: http://sqlfiddle.com/#!18/422f9/1
| id | tag | child_id |
|---- |----- |---------- |
| 1 | A | |
| 1 | | 4 |
| 2 | C | |
| 2 | | 5 |
| 3 | C | |
| 4 | B | |
| 4 | | 5 |
| 5 | D | |
| 5 | E | |