sql-處理無限父級的請求

我目前正在研究PostgreSQL,它有兩個數據表,LU(后勤單位)和Item。

一個項目在一個LU中,一個LU可以在另一個LU中。

Item (id integer, name string, Luid integer references LU.id)
LU (id integer, name string, parentLuId references LU.id (can be null)

如果沒有LU,則parentLuId可以為null。

我希望顯示包含特定項的所有LU,即使該項位于該LU的子項中。

此示例包含一組數據

LU(1,"A",NULL)
LU(2,"B",NULL)
LU(3,"C",NULL)
LU(4,"D",NULL)
LU(5,"E",1)
LU(6,"F",5)


Item(1,"baloon",6)
Item(2,"baloon",2)
Item(4,"pencil",4)
Item(5,"baloon",3)
Item(6,"baloon",2)
Item(7,"baloon",6)

選擇包含baloon的UL應顯示ABCEF,因為D不包含baloon。A和E包含一個baloon,因為它們是包含baloon的F的父對象。

我希望能夠應付無限數量的父母。

? 最佳回答:

這是一個帶有祖先的遞歸查詢。即:

with RECURSIVE ancestors AS (
    SELECT Id,
           Name,
           parentLuId
    FROM Lu
    WHERE exists(select * from item i where i.Luid = LU.id and i.Name = 'baloon')
    UNION
    SELECT d.Id,
           d.Name,
           d.parentLuId
    FROM Lu 
             inner JOIN ancestors c ON c.parentLuId = d.Id
)
SELECT *
FROM ancestors;

這里是DBFiddle演示

主站蜘蛛池模板: 国产福利微拍精品一区二区| 波多野结衣一区在线| 国产乱码精品一区二区三区中文 | 日韩精品无码一区二区三区AV| 亚洲美女视频一区二区三区 | 一区二区中文字幕在线观看| 亚洲福利电影一区二区?| 一区二区三区影院| 国产亚洲福利一区二区免费看| 国产一区二区三区久久| 福利一区二区在线| 91无码人妻精品一区二区三区L| 真实国产乱子伦精品一区二区三区| 日韩在线一区视频| 99久久精品午夜一区二区| 国产一区二区三区乱码| 亚洲一区二区三区无码影院| 制服美女视频一区| 欧洲精品码一区二区三区| 精品国产伦一区二区三区在线观看 | 日本一区二区三区在线看 | 一区二区三区日韩| 国产精品一区二区久久沈樵| 夜夜精品无码一区二区三区| 亚洲一区二区三区四区视频| 99国产精品一区二区| 无码精品人妻一区| 国产伦精品一区二区三区在线观看| 呦系列视频一区二区三区| 无码乱人伦一区二区亚洲一| 国产在线精品一区二区中文| 国产日韩视频一区| 国产自产对白一区| 乱精品一区字幕二区| 制服丝袜一区二区三区| 国产A∨国片精品一区二区| 国产高清在线精品一区二区| 精品一区二区三区在线视频| 亚洲国产精品自在线一区二区| 无码av免费毛片一区二区| 免费萌白酱国产一区二区|