SQL:按foreign_key编号列表排序

时间:2016-02-14 15:21:38

标签: mysql sql tree foreign-keys relational-database

简化示例:

我有一个名为things的SQL表。事情本身有idname。事物是树的一部分,例如一件事可以有一个父母;究竟如何存储并不重要,但重要的是可以从根节点到当前事物获取事物ID列表。

我有另一张名为properties的桌子。属性包含thing_id列,name列和value列。

我现在想要获取所有属性,按thing_id排序,按照从根目录到当前事物的路径的顺序

例如,如果当前事物嵌套如下:Root(1) > Vehicle(4) > Car(2) > Hybrid(3),我希望首先返回属性列表,其中包含thing_id==1的属性,然后是{{1}的属性},然后是thing_id == 4,最后是thing_id==2

如何使用SQL完成此操作? (不使用N + 1选择)

1 个答案:

答案 0 :(得分:1)

在SQL中,这可以通过使用递归查询来实现。这是一个例子

DECLARE @item as varchar(10) 

with CTE (main_part, sub_part, NestingLevel) 
as    
( 
                select main_part, sub_part, 1 from tblParts 
                        where main_part = @item 

                union all 

                select tblParts.main_part, tblParts.sub_part, (NestingLevel + 1) from tblParts 
                inner join CTE on tblParts.main_part = CTE.sub_part 
) 

select * from CTE 

为了在MySQL中解决这个问题,您可以尝试临时表方法。以下是一个很好的例子:How to do the Recursive SELECT query in MySQL?