![](/img/trans.png)
[英]Copy multiple rows of same table but with different id and store old ids of copied row in column name old ids
[英]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 稱為“精心制作的表格”。
然后你可以應用遞歸定義這兩個步驟:
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.