簡體   English   中英

在同一個表中循環找到帶有 id 的 id

[英]Loop in the same table on ids found with an id

我有一個簡單的表:

主要ID 子 ID1 Sub_ID2
ID1 ID2 ID3
ID2 ID4 ID5
ID3 ID7 ID12

Main_ID 中的產品是用 Sub_ID1 和 Sub_ID2 中的產品制作的。

對於給定的 id,我想擁有實現它所必需的所有產品(sub_ids)。

例如:對於 ID ID1,我將有 ID2、ID3、ID4、ID5、ID7、ID12。 (ID1是用ID2和ID3做的,ID2是用ID4和ID5做的,ID3是用ID7和ID12做的,等等)

我試過一些左連接,但我想念一些東西。

SELECT t1.Main_ID
FROM my_table t1
INNER JOIN my_table t2 ON t2.Sub_ID1  t1.Main_ID OR t2.Sub_ID2  t1.Main_ID
WHERE t1.Main_ID LIKE 'ID1'

您可以使用遞歸查詢以可靠的方式執行此操作。

雖然您首先需要執行預處理步驟:“ Sub_ID1 ”和“ Sub_ID2 ”應該使用UNION ALL運算符在一個 Sub_ID 列中找到。 我們將此步驟的 output 稱為“精心制作的表格”。

然后你可以應用遞歸定義這兩個步驟:

  • 基本步驟,select 您要檢查的“ main_id ”記錄
  • 遞歸步驟,在匹配 <" Main_ID "、" SubID "> 時將基本步驟表與精心制作的表連接起來
WITH RECURSIVE one_subid AS (
    SELECT Main_ID, Sub_ID1 AS Sub_ID FROM tab
    UNION ALL 
    SELECT Main_ID, Sub_ID2 AS Sub_ID FROM tab
), cte_rec AS (
    SELECT Main_ID, Sub_ID FROM one_subid WHERE Main_ID = 'ID1'
    
    UNION ALL
  
    SELECT t2.Sub_ID, t1.Sub_ID
    FROM       one_subid t1
    INNER JOIN cte_rec   t2 ON t1.Main_ID = t2.Sub_ID  
)
SELECT Sub_ID FROM cte_rec

“Main_ID = ID1”的 Output:

sub_id
ID2
ID3
ID4
ID7
ID5
ID12

此處查看演示。

暫無
暫無

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

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