oracle使用
select *
from (select st.*
from (select t.*
from bas_basic_tree t
connect by prior t.pid = t.id
start with t.dataid in
(select orgid
from bas_basic_organization_user
where userid = #{userid})) st)
mysql使用递归函数
通用的是表中增加一个treecode字段用于记录节点信息:
一级节点:001
二级节点:001001,001002
三级节点:001001001,001002001
sql : select substr(concat(1,treecode)+1,2) from bas_model_tree
where pid=#{pid} order by treecode desc limit 1
查询子节点是根据treecode模糊查询先查询出id,再根据id查询
查询父节点根据treecode
String str = treecode;
String con="(";
for(int i=0;i<str.length();i+=3) {
con=con+str.substring(i)+",";
}
con=con.substring(0, con.length()-1)+")";
根据con使用in查询出id,再根据id查询
oracle使用select * from (select st.* from (select t.* from bas_basic_tree t connect by prior t.pid = t.id start with t.dataid in (select orgid f...
SELECT * FROM Ts_Dept WHERE DeptID='10016'
UNION ALL
SELECT Ts_Dept.* FROM dept_parent,Ts_Dept WHERE Ts_Dept.DeptID=dept_parent.parentid
SELECT * FROM dept_parent
根据
父节点
查询所有
子节点
WITH Ts_Dept_children AS
SELECT
CREATE TABLE [dbo].[BD_Booklet](
[ObjID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NULL,
[ObjLen] [int] NULL,
[ObjName] [nvarchar](50) NULL,
[ObjUrl] [nvarchar](200) NULL,
[ObjExpress] [nvarchar](500) NULL,
[ObjTime] [nvar
SQL
子节点
本文中的所有查询在POSTGRES中查询,其他数据库语法请具体搜索。
本文的SQL语句适用于具有如下类似结构来记录父子集关系的数据表。以部门表(hr_department)为例进行
SQL查询
。
TABLE_NAME(id, parent_id)
解决问题:日常关系表中只会存放一层父子关系信息,要求循环追溯查询出所有层级的
父节点
。
子-->父1-->父2-->父3-->...,示例使用的Postgre数据库,其他数据库同样适用。
一般思路采用不断left join向上搜寻,代码如下:
create table test(id int,name varchar(100),parentId int); --初始化父子关系表
insert into test values(101,'a',100);
insert int
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。
在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。
表结构和数据
CREATE TABLE table1(id int, name varchar(10), parent_id int);
INSERT table
其中,`your_table` 是存储树形结构的表,`node_id` 是每个节点的唯一标识符,`parent_id` 是该节点的
父节点
的标识符,`:parent_node_id` 是指定要查询其所有
子节点
的节点的标识符。
此查询将返回指定节点及其所有
子节点
的所有信息。如果您只想返回
子节点
的信息,可以将 `START WITH` 子句中的 `node_id` 更改为
父节点
的标识符。