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