對于大多數 PostgreSQL(或 SQL)專家來說,這可能看起來有點微不足道,但由于我對此相當陌生,所以我很難想出一個合理的邏輯規則來解決這個問題。
以下是存盤在 SQL 資料庫中的表(兩個欄位 - ChildProduct 和 ParentProduct)中的產品 A 的物料清單:
CREATE TABLE Table2
(ChildProduct varchar(20), ParentProduct varchar(20));
INSERT INTO Table2
(ChildProduct, ParentProduct)
Values
('Product B', 'Product A'),
('Product C', 'Product A'),
('Product D', 'Product A'),
('Product B1', 'Product B'),
('Product B2', 'Product B'),
('Product D1', 'Product D'),
('Product E1', 'Product D1'),
('Product E2', 'Product D1');
使用 PostgreSQL,我想從上表中生成以下輸出:
ChildProduct ParentProduct
Product B Product A
Product B1 Product A
Product B2 Product A
Product C Product A
Product D Product A
Product D1 Product A
Product E1 Product A
Product E2 Product A
Product B1 Product B
Product B2 Product B
Product D1 Product D
Product E1 Product D
Product E2 Product D
Product E1 Product D1
Product E2 Product D1
uj5u.com熱心網友回復:
只是以相反順序排列的列
with recursive pc as (
Select p.ParentProduct, p.ChildProduct
from table2 p left outer join table2 c on p.ParentProduct=c.ChildProduct
where c.ParentProduct is null
Union
Select pc.ParentProduct, t.ChildProduct
from pc join table2 t on (pc.ChildProduct=t.ParentProduct)
)
Select * from pc
union
Select ParentProduct, ChildProduct from table2
order by 1,2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/442339.html
標籤:PostgreSQL
