SELECT * FROM table_name WHERE Id='4' --表的主键ID UNION ALL SELECT T0.* FROM TEMP,table_name T0 WHERE TEMP.Id=T0.ParentId --子级ID==父级ID SELECT * FROM TEMP; --根据指定节点ID获取所有父节点-- WITH TEMP AS SELECT * FROM table_name WHERE Id='32' --表的主键ID UNION ALL SELECT T0.* FROM TEMP,table_name T0 WHERE TEMP.ParentId=T0.Id --父级ID==子级ID SELECT * FROM TEMP; SELECT * FROM Ts_Dept WHERE Dept ID ='10016' UNION ALL SELECT Ts_Dept.* FROM dept_parent,Ts_Dept WHERE Ts_Dept.Dept ID =dept_parent.parent id SELECT * FROM dept_parent 根据父 节点 查询所有子 节点 WITH Ts_Dept_children AS SELECT 在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 My SQL 中,这个需求的实例稍显复杂, My SQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。 表结构和数据 CREATE TABLE table1( id int, name varchar(10), parent_ id int); INSERT table CREATE TABLE [dbo].[BD_Booklet]( [Obj ID ] [int] ID ENTITY(1,1) NOT NULL, [Parent ID ] [int] NULL, [ObjLen] [int] NULL, [ObjName] [nvarchar](50) NULL, [ObjUrl] [nvarchar](200) NULL, [ObjExpress] [nvarchar](500) NULL, [ObjTime] [nvar CREATE DEFINER=root@localhost FUNCTION getParentName(orgNo int(11)) RETURNS varchar(255) CHARSET utf8mb4 BEGIN DECLARE orgName varchar(100) default ‘’; --组织名称 DECLARE orgNo int(11) default orgNo; --组织号 DECLARE legalPersonality int(1) default 0; --组织级别 t1. id , t1.parent_ id , t2.*, IF(FIND_IN_SET(t1.parent_ id , @p id s) > 0, @p id s := CONCAT(@p id s, ',', t1. id ), 0) AS isChild FROM ( SELECT id , parent_ id FROM sy