簡體   English   中英

如何使用SQL檢索表中所有記錄的所有3級子節點?

[英]How can I retrieve all 3rd level child nodes for all records in my table using SQL?

我有這樣的一張桌子:

item(id, parent_id, data)

該表中有多個數據集。 每個數據集都有一個根記錄,其中parent_id設置為-1 父記錄的所有子記錄都將其parent_id記錄設置為父ID。 隨后的所有子代都將其parent_id設置為其直接父代的parent_id

假設我要獲取所有根節點。 這很容易

select * from item where parent_id = -1

選擇所有非父節點也很容易:

select * from item where parent_id != -1

如何僅從所有記錄中選擇3級節點? 在我的特定情況下,我嘗試查找的是表中是否有任何三級節點,或者可以肯定表中的所有非根記錄都是第二級節點。

獎金問題(與湯姆的答案一起使用后)

該查詢返回50,003條記錄:

SELECT
    count(L1.id)
FROM
    Item L1
WHERE
    L1.parent_id != -1;

這將返回50,000條記錄:

SELECT
    count(L2.id)
FROM
    Item L1
INNER JOIN Item L2 ON L2.parent_id = L1.id
WHERE
    L1.parent_id = -1;

如何隔離這3條記錄以查看它們的狀態?

注意

獎勵-證明那3條記錄是孤立的,未與父級連接。

由於您僅進入三個級別,而恰好進入三個級別,因此您可以簡單地JOIN該級別:

SELECT
    L3.id,
    L3.parent_id,
    L3.data
FROM
    Item L1
INNER JOIN Item L2 ON L2.parent_id = L1.id
INNER JOIN Item L3 ON L3.parent_id = L2.id
WHERE
    L1.parent_id = -1

暫無
暫無

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

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