如何在SQL中从同一个表中进行递归选择



我有一个带有以下的表

Table1:
ObjectName  Field           Type      Link
Account     Name            String          
Asset       AccountId       Guid      Account       
Asset       Name            String          
Account     BillingStreet   String    Details       
Details     FirstName       String    Order
Order       OrderNo         Integer  
Order       OrderItem       String      

主要参考点是资产。我的意思是,我可以从表1中选择*,其中ObjectName='Asset'。那就给我两排了。但有一个链接到资产即账户。因此,如果上面的选择上有一个链接,那么选择所有具有该名称的行

所以类似于:

从"资源"中选择"*",如果"链接"列中有值,则选择"对象名称"为"链接名称"的所有行,并继续进行,直到没有值为止。因此,它将在选择订单时完成
,因为订单上没有链接

如果我要从表1中选择*,其中ObjectName='Account',那么由于其中一行中有一个链接,我需要选择Details行,而Details又有一个到Order的链接,我必须选择Order,因为Order没有Linhk,这就是

我怎么能在sql中做这个复杂的查询,不知道从哪里开始?

如何在sql中进行这种复杂的查询?

您正在描述一个分层查询。不同数据库的语法略有不同(并非所有数据库都实现此功能(,但其想法是:

with recursive cte (objectname, field, type, link) as (
select t.* from table1 t where objectname = 'Asset'
union all
select t.*
from table1 t
inner join cte c on c.link = t.objectname
)
select * from cte

最新更新