SELECT @ids AS _ids,
( SELECT @ids := GROUP_CONCAT( ou ) FROM sys_new_org WHERE FIND_IN_SET( parent_id, @ids ) ) AS cids,@l := @l + 1 AS LEVEL
sys_new_org,
( SELECT @ids := '50002001', @l := 0 ) b
WHERE
@ids IS NOT NULL
) id,
sys_new_org DATA
WHERE
FIND_IN_SET( DATA.ou, ID._ids )
1,给出公司,查出公司的所有父级。SELECT ou, cn, company_id, company_name, parent_id, new_order, create_time, is_company FROM ( select @id as _id, (select @id := parent_id from sys_new_org where ou in (_id)) as ids from sys_new_org t where
这里用到了一个函数with
WITH CategoryInfo AS(
SELECT StuId,StuName,StuParent FROM dbo.Class WHERE StuId = id
UNION ALL
SELECT a.StuId,a.StuName,a.StuParent FROM dbo.Class AS a,CategoryInfo AS b WHERE a.StuI
通常我们在编写程序时,在建立数据表时,会有建立
父级
,然后逐层建立子级,子级的记录会包含其上层的
父级
Id,这样形成了多个层级,如何根据
父级
Id,一次性得到所有的子级记录,下文做介绍。
我们在
数据库
中建立数据表tbtree.
下面展示一些 内联代码片。
select * from T_SYS_DIC
start with dic_id = '1000076' CONNECT BY PRIOR dic_id = parent_dic_id
对应结果:可以看出所有数据均为父 id为 1000
with 自定义结果名称(Id,Name,Pid) as (
select Id,Name,Pid from 要查询的表名称where Id ='' --顶级的查询条件,要查询哪个
父级
的所有子级,条件就写哪个
union all
select 要查询的表名称.Id,要查询的表名称.Name,要查询的表名称.Pid from 要查询的表名称,自定义结果名称 where 要查询的表名称.Pid = 自定义结果名称.Id
select * from 自定义结果名称;
Id,Name,Pid ..
t1.*,
t2.*,
IF(FIND_IN_SET(parent_id, @pids) > 0, @pids := CONCAT(@pids, ',', id), '0') AS isChild
FROM (
SELECT * FROM rule_enti
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=‘3
select b.* from Traffic_Sites b where ParentId = '4'
union all
select a.* from Traffic_Sites a join t b on a.ParentId=b.SiteId
select * from t
调换 SiteId 的位
在 DB2 中,你可以使用通用表达式(Common Table Expression)来递归查询所有
子集
。下面是一个例子:
假设你有一个名为 `category` 的表,它有两个字段 `id` 和 `parent_id` 分别表示分类的 ID 和
父级
分类的 ID。如果一个分类没有
父级
分类,则其 `parent_id` 字段为 NULL。
现在,如果你想查询 ID 为 1 的分类的所有
子集
,可以使用以下
SQL
:
WITH RECURSIVE subcategories AS (
SELECT id, parent_id
FROM category
WHERE id = 1
UNION ALL
SELECT c.id, c.parent_id
FROM category c
JOIN subcategories s ON s.id = c.parent_id
SELECT * FROM subcategories;
这个查询首先选择 ID 为 1 的分类记录,并将其作为起点。然后,使用递归查询选择所有子分类。递归查询的基本思想是将查询的结果与原始表连接,直到没有更多的
子集
为止。在这个例子中,第二个 `SELECT` 语句连接了 `category` 表和 `subcategories` 表本身,这样就可以递归地查询所有子分类。
最后,使用 `SELECT` 语句选择所有子分类的记录并返回。