[英]SQL: Order by a list of foreign_key numbers
一个简化的例子:
我有一个名为things
的SQL表。 事物本身具有id
和name
。 事物是一棵树的一部分,例如,事物可以有父代; 确切的存储方式并不重要,但是重要的是可以获取从根节点到当前事物的事物ID列表。
我有另一个表,称为properties
。 一个属性具有一个thing_id
列,一个name
列和一个value
列。
现在,对于当前事物,我想要获取按特性root到当前事物的路径顺序,按thing_id排序的所有属性。
例如,如果当前事物是这样嵌套的: Root(1) > Vehicle(4) > Car(2) > Hybrid(3)
,则我希望返回的属性列表中包含具有thing_id==1
的属性首先,其次是thing_id == 4
,然后是thing_id==2
,最后是thing_id==3
。
如何使用SQL完成此操作? (不使用N + 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中解决此问题,您可以尝试使用临时表方法。 这是一个很好的例子: 如何在MySQL中进行递归SELECT查询?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.