通常,在查询树形结构的数据时,需要使用START WITH...CONNECT BY PRIOR的方式查询。
条件2:起始的查询条件,指定根节点
条件3:指定父节点和子节点直接的关系,PRIOR指定父节点
假设现有部门表DEPARTMENT,部门表中字段包括DEPID(部门ID),PARENTDEPID(父部门ID),DEPNAME(部门名称)
1、我们要查询部门ID="1110"的部门的所有父部门的ID和名称(包含部门ID="1110"的部门,不包含可通过WHERE条件过滤)
查询当前节点的所有子节点时,需要将PRIOR放在子节点左侧
查询当前节点的所有父节点时,需要将PRIOR放在父节点左侧
START WITH...CONNECT BY PRIOR的语法为:
SELECT 字段
FROM 表名
WHERE 条件1
START WITH 条件2
CONNECT BY PRIOR 条件3
条件1:过滤条件
条件2:起始的查询条件,指定根节点
条件3:指定父节点和子节点直接的关系,PRIOR指定父节点
假设现有部门表DEPARTMENT,部门表中字段包括DEPID(部门ID),PARENTDEPID(父部门ID),DEPNAME(部门名称)
1、我们要查询部门ID="1110"的部门的所有父部门的ID和名称(包含部门ID="1110"的部门,不包含可通过WHERE条件过滤)
SELECT DEPID, DEPNAME
FROM FW_DEPARTMENT
--WHERE DEPID <> '1110'
START WITH DEPID = '1110'
CONNECT BY PRIOR PARENTDEPID = DEPID
2、我们要查询部门ID="1110"的部门的所有子部门的ID和名称(包含部门ID="1110"的部门,不包含可通过WHERE条件过滤)
SELECT DEPID, DEPNAME
FROM FW_DEPARTMENT
--WHERE DEPID <> '1110'
START WITH DEPID = '1110'
CONNECT BY PRIOR DEPID = PARENTDEPID
从上面2个sql我们可以发现:
查询当前节点的所有子节点时,需要将PRIOR放在子节点左侧
查询当前节点的所有父节点时,需要将PRIOR放在父节点左侧