簡體   English   中英

SQL Server查詢錦標賽比賽

[英]SQL Server query for tournament matches

我有一個用於存儲比賽(游戲或任何您想要稱呼的比賽)的表格,目的是能夠查看單個分區的括號。

這是桌子:

CREATE TABLE [dbo].[Match]
(
    [MatchID] [bigint] IDENTITY(1,1) NOT NULL,
    [OrgDivisionID] [bigint] NOT NULL,
    [MatchTimeLength] [bigint] NULL,
    [ParentMatchID1] [bigint] NULL,
    [ParentMatchID2] [bigint] NULL,

    CONSTRAINT [PK_Match] 
        PRIMARY KEY CLUSTERED ([MatchID] ASC)
)

樣本數據:

MatchID OrgDivisionID   MatchTimeLength ParentMatchID1  ParentMatchID2
----------------------------------------------------------------------
 1      1               180             NULL            NULL
 2      1               180             NULL            NULL
 3      1               180             NULL            NULL
 4      1               180             NULL            NULL
 5      1               180             1               2
 6      1               180             3               4
 7      1               180             5               6

(這場比賽中誰或哪些球隊的詳細信息將存儲在一個單獨的表中,該表現在不相關。)

這個想法是,單個匹配可以來自零個父MatchID(在這種情況下,這是一次初始匹配/第一輪)或1或2個父MatchID。

如果一場比賽只有1個父項MatchID,則意味着這場比賽是由與“再見”的人與先前參加比賽的人進行的。

如果一場比賽有2個雙親MatchID,則意味着這場比賽是由之前參加比賽的兩個人共同產生的。

我需要的是一個查詢,它將顯示所有匹配項的完整路徑。 例如MatchID 1-> MatchID 5-> MatchID 7

任何幫助或建議將是巨大的。 謝謝

通用表表達式(CTE)最適合此任務。

;with cte as (
--anckor query
select MatchID,ParentMatchID1,ParentMatchID2, 1 lvl
from #match
where matchid = 1 --or other id
union all -- note: UNION ALL
--recursive query
select m.MatchID,m.ParentMatchID1,m.ParentMatchID2,  lvl+1
from #match m
inner join cte on cte.matchid = m.ParentMatchID1 or cte.matchid = m.ParentMatchID2
)
--Get result from here
select * from cte 

暫無
暫無

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

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