簡體   English   中英

如何從 SQL 中的同一個表中進行遞歸選擇?

[英]How can i do a recursive select from the same Table in 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      

主要參考點是資產。 我的意思是我可以從 Table1 中選擇 *,其中 ObjectName = 'Asset'。 那會給我2行。 但是有一個鏈接到資產即帳戶。 因此,如果上面的選擇中有一個鏈接,則選擇具有該名稱的所有行

所以像:

select * from Asset ,如果 Link 列中有一個值,則選擇所有具有 Link Name 的 ObjectName 的行,然后繼續直到沒有更多的行。 所以它會在選擇訂單時完成
因為訂單上沒有鏈接

如果我要從 Table1 中選擇 *,其中 ObjectName = 'Account',那么由於行中有一個鏈接,我需要選擇 Details 行,而 details 又具有指向 Order 的鏈接,我需要選擇Order 並且因為 Order 沒有 Link ,就是這樣

我如何在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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