簡體   English   中英

SQL:按外鍵數字列表排序

[英]SQL: Order by a list of foreign_key numbers

一個簡化的例子:

我有一個名為things的SQL表。 事物本身具有idname 事物是一棵樹的一部分,例如,事物可以有父代; 確切的存儲方式並不重要,但是重要的是可以獲取從根節點到當前事物的事物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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM