SELECT
id,
CASE
WHEN p_id is null THEN 'Root'
WHEN id in (select distinct p_id from tree) THEN 'Inner'
ELSE 'Leaf'
END AS `type`
FROM tree;
SELECT id,'Root' AS 'type' FROM tree WHERE p_id IS NULL
UNION
SELECT id,'Inner' AS 'type' FROM tree WHERE id IN (SELECT DISTINCT p_id FROM tree WHERE p_id IS NOT NULL) AND p_id IS NOT NULL
UNION
SELECT id,'Leaf' AS 'type' FROM tree WHERE id NOT IN (SELECT DISTINCT p_id FROM tree WHERE p_id IS NOT NULL) AND p_id IS NOT NULL;
# ifnull 三元运算符
SELECT
id,
IF(ISNULL(p_id),'Root',
IF(id IN (SELECT p_id FROM tree), 'Inner','Leaf')) AS 'type'
FROM tree;