从两个表中选择树结构

时间:2017-09-17 00:54:16

标签: sql tree

让我们假设我有表A

| PK | Name |
-------------
| 1  | AA   |
| 2  | BB   | 
| 3  | CC   |

和表B

| PK | FK | Value |
-------------------
| 1  | 1  | i     |
| 2  | 1  | j     |
| 3  | 2  | x     |
| 4  | 2  | y     |
| 5  | 3  | l     |
| 6  | 3  | k     |

如何选择以下结果

| PK | Name |
-------------
| 1  | AA   |
| 1  | i    |
| 2  | j    |
| 2  | BB   |
| 3  | x    |
| 4  | y    |
| 3  | CC   |
| 3  | l    |
| 4  | k    |

列出父母,并在每个父母列表下列出其子女

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

非常有趣的桌面设计。我认为这只是将您的数据合并然后按照您的需要订购结果的问题。如果它只是单级子父母关系,这应该可以正常工作。

If Object_Id('tempdb..#TableA') Is Not Null Drop Table #TableA;
If Object_Id('tempdb..#TableB') Is Not Null Drop Table #TableB;

Select * Into #TableA
From  (Values (1,'AA'),(2,'BB'),(3,'CC')) As a(PK,[Name])
Select * Into #TableB
From  (Values (1,1,'i'),(2,1,'j'),(3,2,'x'),(4,2,'y'),(5,3,'l'),(6,3,'k')) As a(PK,FK,[Value])

;With Cte
As
(
Select PK,[Name],PK As OrderID,0 As LevelID /*Used to ensure parents are put above children*/
From #TableA
Union All
Select PK,[Value],FK,1
From #TableB
)

Select [PK], [Name]
From Cte
Order By OrderID,LevelID

<强>结果:

PK | Name
1  | AA
1  | i
2  | j
2  | BB
3  | x
4  | y
3  | CC
5  | l
6  | k

注意:我的最后两行(l和k)与结果略有不同。当你把3和4作为id而不是5和6

时,我认为你错了