我有一个带有以下的表
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