[英]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.