大家首先需要创建一张存储层级数据的表,例如以下的“department”表:
CREATE TABLE department ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, parent_id INT );
其中“id”字段是部门的唯一标识符,“name”字段表示部门的名称,“parent_id”字段表示父部门的ID。当一个部门没有父部门时,其“parent_id”字段设为NULL。
接下来大家将向“department”表中添加一些测试数据:
INSERT INTO department VALUES (1, '总公司', NULL), (2, '市场部', 1), (3, '销售部', 2), (4, '技术部', 1), (5, '前端开发组', 4), (6, '后端开发组', 4);
大家可以使用以下的递归查询方式来获取所有下级的层级数据:
WITH RECURSIVE subdepartments AS ( SELECT * FROM department WHERE id = 1 UNION ALL SELECT d.* FROM department d JOIN subdepartments sd ON d.parent_id = sd.id ) SELECT * FROM subdepartments;
上述查询语句中,“WITH RECURSIVE”关键字指定了递归查询。大家首先选择了根部门(ID为1的部门),并将其加入到结果中。然后大家递归地选择了所有直接下级部门,并将它们加入到结果中。递归查询一直持续到没有下级部门时结束。
通过上述查询语句,大家可以获取所有下级部门的层级数据。