表结构如下:
CREATE TABLE `rds_mapping_org` ( `Org_ID` varchar(50) NOT NULL DEFAULT '', --主键 `Org_ParentID` varchar(50) DEFAULT NULL, --父ID `Org_Name` varchar(50) DEFAULT NULL, --名称 PRIMARY KEY (`Org_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据如下:
INSERT INTO `tb_org` VALUES ('66a04c28-6174-4188-a00b-47d378bb66e9','f7364e25-91ba-4ade-b7e8-353aedd43437','一级部门1'); INSERT INTO `tb_org` VALUES ('d1a3612c-69a5-42a4-820a-bc54d4b0f005','f7364e25-91ba-4ade-b7e8-353aedd43437','一级部门2'); INSERT INTO `tb_org` VALUES ('db714c65-df84-4f09-8178-738eb7ff5f30','d1a3612c-69a5-42a4-820a-bc54d4b0f005','二级部门2'); INSERT INTO `tb_org` VALUES ('f7364e25-91ba-4ade-b7e8-353aedd43437',NULL,'根部门');
请问我要如何查出路径? 举例如下:
Org_ID Org_Name Org_Path
02163340-ff8e-444c-83f3-16c1ba9df230 二级部门1 二级部门1,一级部门1,根部门
db714c65-df84-4f09-8178-738eb7ff5f30 二级部门2 二级部门2,一级部门2,根部门
不能用存储过程和函数,业务要求远程执行sql语句,无法更改目标数据库
数据库自带函数也不行?
create TABLE rds_mapping_org ( Org_ID varchar(50) NOT NULL ,--主键 Org_ParentID varchar(50) NULL, --父ID Org_Name varchar(50) NULL, --名称 ) INSERT INTO rds_mapping_org VALUES ('66a04c28-6174-4188-a00b-47d378bb66e9','f7364e25-91ba-4ade-b7e8-353aedd43437','a1'); INSERT INTO rds_mapping_org VALUES ('d1a3612c-69a5-42a4-820a-bc54d4b0f005','f7364e25-91ba-4ade-b7e8-353aedd43437','a2'); INSERT INTO rds_mapping_org VALUES ('db714c65-df84-4f09-8178-738eb7ff5f30','d1a3612c-69a5-42a4-820a-bc54d4b0f005','b2'); INSERT INTO rds_mapping_org VALUES ('f7364e25-91ba-4ade-b7e8-353aedd43437',NULL,'root'); ;with cte as ( select *,cast(p.org_name as nvarchar(max)) as namepath from rds_mapping_org p where Org_ParentID is null union all select p.org_id,p.org_parentid,p.org_name,p.org_name+'->'+c.namepath as namepath from cte c inner join rds_mapping_org p on p.Org_ParentID=c.Org_ID ) select * from cte
SQL Server 中,可以使用CTE实现,不难,MYSQL 就不懂了