0
我有一張如下所示的表格,它是樹的表示。MySQL病例聲明問題
id --- parentid
1 NULL
2 1
3 1
4 2
這裏1是根節點,4,3是葉節點,2是中間節點。如何寫它打印
id ---- type
1 root
2 intermiditae
3 leaf
4 leaf
我有一張如下所示的表格,它是樹的表示。MySQL病例聲明問題
id --- parentid
1 NULL
2 1
3 1
4 2
這裏1是根節點,4,3是葉節點,2是中間節點。如何寫它打印
id ---- type
1 root
2 intermiditae
3 leaf
4 leaf
這裏是做的一種方式的SQL查詢:
SELECT mytable.id, IF(mytable.parent_id IS NULL, 'root',
IF(COUNT(children.id) > 0, 'intermediate', 'leaf'))
FROM mytable
LEFT JOIN mytable AS children ON children.parent_id = mytable.id
GROUP BY mytable.id;
「根」是其parent_id
是NULL
行。然後,計算孩子的數量就足以確定入口是否是葉子。
您還可以獲取3個查詢和UNION
相同的結果。
(SELECT mytable.id, 'root' AS type
FROM mytable
WHERE mytable.parent_id IS NULL)
UNION
(SELECT mytable.id, 'intermediate' AS type
FROM mytable
JOIN mytable AS children ON children.parent_id = mytable.id
WHERE mytable.parent_id IS NOT NULL
GROUP BY mytable.id)
UNION
(SELECT mytable.id, 'leaf' AS type
FROM mytable
LEFT JOIN mytable AS children ON children.parent_id = mytable.id
WHERE children.id IS NULL);
使用左連接本身來決定孩子的存在:
select id,
case when parent_id is null then 'root'
when child is null then 'leaf'
else 'intermediate' end as type
from mytable
left join (select parent_id parent, max(id) child
from mytable group by 1) x on parent = id
我會爲根添加'ID = 1的parentId = 1'到數據。查詢應該與3個選擇的聯合,根,interm和leaf:'select id,'root'作爲id = parentid union select ...的數據類型。處理這個問題並返回查詢。 – PeterMmm
是的,對不起,我會編輯 – Vinny