我有一张如下表:
ID P_ID
1 2
3 2
6 8
9 8
2 5
8 5
5 null
我使用了查询
SELECT ID,
CASE
WHEN P_ID IS NULL THEN 'Root'
WHEN NOT EXISTS (SELECT ID FROM MINOA.TREE WHERE P_ID=T0.ID) THEN 'Leaf'
ELSE 'Inner'
END T
FROM MINOA.TREE T0
ORDER BY ID;
我得到的输出是:
ID P_ID
1 leaf
2 inner
3 leaf
5 inner
6 leaf
8 inner
9 leaf
但对于ID 5,它应该返回Root
答案 0 :(得分:0)
我已经创建了这样的表:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| p_id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
使用您的值:
+------+------+
| id | p_id |
+------+------+
| 1 | 2 |
| 3 | 2 |
| 6 | 8 |
| 9 | 8 |
| 2 | 5 |
| 8 | 5 |
| 5 | NULL |
+------+------+
执行此查询:
SELECT id, CASE WHEN p_id IS NULL THEN 'Root' WHEN NOT EXISTS (SELECT id FROM tree WHERE p_id = t0.id) THEN 'Leaf' ELSE 'Inner' END as PROPERTY from tree t0 order by id;
返回:
+------+----------+
| id | PROPERTY |
+------+----------+
| 1 | Leaf |
| 2 | Inner |
| 3 | Leaf |
| 5 | Root |
| 6 | Leaf |
| 8 | Inner |
| 9 | Leaf |
+------+----------+