父零件代码 零件代码
A A1
A1 A11
A1 A12
A12 A121
A A2
B B1
B1 B11
B1 B12
B B2
需要得到的结果=>
顶层零件 父零件代码 零件代码 层次
A A A1 1
A A1 A11 2
A A1 A12 2
A A12 A121 3
A A A2 1
B B B1 1
B B1 B11 2
B B1 B12 2
B B B2 1
说明得到的结果:遍历所有顶层的零件,将其下面所有隶属的零件按照父子关系列出来
--生成测试数据
create table BOM(ID INT,PID INT,MSG VARCHAR(1000))
insert into BOM select 1,0,NULL
insert into BOM select 2,1,NULL
insert into BOM select 3,1,NULL
insert into BOM select 4,2,NULL
insert into BOM select 5,3,NULL
insert into BOM select 6,5,NULL
insert into BOM select 7,6,NULL
go
--创建用户定义函数用于取每个父节点下子节点的采购配置信息
create function f_getChild(@ID VARCHAR(10))
returns @t table(ID VARCHAR(10),PID VARCHAR(10),Level INT)
as
begin
declare @i int
set @i = 1
insert into @t select ID,PID,@i from BOM where PID = @ID
while @@rowcount<>0
begin
set @i = @i + 1
insert into @t
select
a.ID,a.PID,@i
from
BOM a,@t b
where
a.PID=b.ID and b.Level = @i-1
end
return
end
go
--执行查询
select ID from dbo.f_getChild(3)
go
--输出结果
/*
ID
----
5
6
7
*/
--删除测试数据
drop function f_getChild
drop table BOM
创建用户定义函数,每个子节点de父节点的信息
--生成测试数据
create table BOM(ID int,parentID int,sClassName varchar(10))
insert into BOM values(1,0,'1111' )
insert into BOM values(2,1,'1111_1' )
insert into BOM values(3,2,'1111-1-1' )
insert into BOM values(4,3,'1111-1-1-1')
insert into BOM values(5,1,'1111-2' )
go
--创建用户定义函数,每个子节点de父节点的信息
create function f_getParent(@ID int)
returns varchar(40)
as
begin
declare @ret varchar(40)
while exists(select 1 from BOM where ID=@ID and parentID<>0)
begin
select @ID=b.ID,@ret=','+rtrim(b.ID)+isnull(@ret,'')
from
BOM a,BOM b
where
a.ID=@ID and b.ID=a.parentID
end
set @ret=stuff(@ret,1,1,'')
return @ret
end
go
--执行查询
select ID,isnull(dbo.f_getParent(ID),'') as parentID from BOM
go
--输出结果
/*
ID parentID
----------- ----------------------------------------
1
2 1
3 1,2
4 1,2,3
5 1
*/
--删除测试数据
drop function f_getParent
drop table BOM
go
create table tb(pid varchar(10), cid varchar(10))
insert into tb values('A' , 'A1')
insert into tb values('A1' , 'A11')
insert into tb values('A1' , 'A12')
insert into tb values('A12' , 'A121')
insert into tb values('A' , 'A2')
insert into tb values('B' , 'B1')
insert into tb values('B1' , 'B11')
insert into tb values('B1' , 'B12')
insert into tb values('B' , 'B2')
go
create function f_pid(@cid varchar(10)) returns int
as
begin
declare @re_str as varchar(10)
set @re_str = ''
declare @level as int
set @level = 0
select @re_str = pid from tb where cid = @cid
while exists (select 1 from tb where cid = @re_str)
begin
select @re_str = pid from tb where cid = @re_str
set @level = @level + 1
end
return @level + 1
end
go
select * , dbo.f_pid(cid) 层次 from tb
drop table tb
drop function dbo.f_pid
/*
pid cid 层次
---------- ---------- -----------
A A1 1
A1 A11 2
A1 A12 2
A12 A121 3
A A2 1
B B1 1
B1 B11 2
B1 B12 2
B B2 1
(所影响的行数为 9 行)
*/
create table tb(pid varchar(10), cid varchar(10))
insert into tb values('A' , 'A1')
insert into tb values('A1' , 'A11')
insert into tb values('A1' , 'A12')
insert into tb values('A12' , 'A121')
insert into tb values('A' , 'A2')
insert into tb values('B' , 'B1')
insert into tb values('B1' , 'B11')
insert into tb values('B1' , 'B12')
insert into tb values('B' , 'B2')
go
create function f_pid(@cid varchar(10)) returns varchar(20)
as
begin
declare @re_str as varchar(10)
set @re_str = ''
declare @level as int
set @level = 0
select @re_str = pid from tb where cid = @cid
while exists (select 1 from tb where cid = @re_str)
begin
select @re_str = pid from tb where cid = @re_str
set @level = @level + 1
end
return @re_str + ',' + cast(@level + 1 as varchar)
end
go
select 顶层零件 = left(dbo.f_pid(cid),charindex(',',dbo.f_pid(cid))-1) ,
父零件代码 = pid ,
零件代码 = cid ,
substring(dbo.f_pid(cid),charindex(',',dbo.f_pid(cid))+1 , len(dbo.f_pid(cid))) 层次 from tb
drop table tb
drop function dbo.f_pid
/*
顶层零件 父零件代码 零件代码 层次
-------------------- ---------- ---------- --------------------
A A A1 1
A A1 A11 2
A A1 A12 2
A A12 A121 3
A A A2 1
B B B1 1
B B1 B11 2
B B1 B12 2
B B B2 1
(所影响的行数为 9 行)
*/
create table #tb(pid varchar(10), cid varchar(10))
insert into #tb values('A' , 'A1')
insert into #tb values('A1' , 'A11')
insert into #tb values('A1' , 'A12')
insert into #tb values('A12' , 'A121')
insert into #tb values('A' , 'A2')
insert into #tb values('B' , 'B1')
insert into #tb values('B1' , 'B11')
insert into #tb values('B1' , 'B12')
insert into #tb values('B' , 'B2')
go
select substring(pid,1,1) as 顶层零件,pid as 父零件代码,cid as 零件代码,层次=len(pid) from #tb
drop table #tb
/*
A A A1 1
A A1 A11 2
A A1 A12 2
A A12 A121 3
A A A2 1
B B B1 1
B B1 B11 2
B B1 B12 2
B B B2 1
*/
有如下表数据: 获取“菜单”分类的子分类数据列表: SELECT a.cat_id, a.cat_name, a.sort_order AS parent_order, a.cat_id, b.cat_id AS child_id, b.cat_name AS child_nameFROM article_cat AS a ...
1 建表:CREATE TABLE test_tree (test_id INT NOT NULL,pid INT,test_val VARCHAR(10),PRIMARY KEY (test_id));INSERT INTO test_tree VALUES(1, 0, '.NET');INSERT INTO test_tree VALUES(2, 1, 'C...
已知题目: 表测试数据如下: create table C(Id int ,Namevarchar(20),Parent_id int) insert into C values(1,'w',null) insert into C values(3,'d',null) insert into C values(5,'d',1) ...
1 建表:CREATE TABLE test_tree (test_id INT NOT NULL,pid INT,test_val VARCHAR(10),PRIMARY KEY (test_id));INSERT INTO test_tree VALUES(1, 0, '.NET');INSERT INTO test_tree VALUES(2, 1, 'C...
SQL实现递归查询 根据父级的部门ID查询所有的子级部门; 根据父级的区划代码查询所属下级的所有区划信息; 根据子级ID查询隶属行政区划信息; 根据组织机构ID查询所有子级组织机构; 数据准备 DROP TABLE IF EXISTS ...
1.利用子查询进行过滤 子查询:嵌套在其他查询中的查询 SELECT column1_name FROM table1 WHERE column2_name IN ( SELECT column2_name FROM table2 WHERE column2_name >...
Oracle诊断或调优经常需要做的就是查看SQL语句的执行计划,很多时候我们需要得到sql语句在不同场景、不同时间段的执行计划。Oracle10g平台以上获取sql语句的执行计划的方法如下:1. Explain Plan Command通过explain...
1 T-SQL高级查询语句 2 3 高级查询 4 5 1.连接查询,对结果集列的扩展 6 select * from info 7 8 select * from info,nation #形成笛卡尔积 9 select * from info,nation where info.nation=...
本文的SQL语句适用于具有如下类似结构来记录父子集关系的数据表。以部门表(hr_department)为例进行SQL查询。 TABLE_NAME(id, parent_id) id name parent_id 1 顶级部门 NULL 2 一层部门 1 3 二层部门...
高级查询(多表连接查询) ...SQL 查询会比较逐个比较表 1 和表 2 中的每一条记录,来寻找满足连接谓词的所有记录对。当连接谓词得以满足时,所有满足条件的记录对的字段将会结合在一起构成结果表。 外连接: 左连接: ...
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE...在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行...
如何让ext1的数据连接到前几行相应的typeid,实现父子关系? typeid是类别id, typename是类别名, userid是用户id,这是外键,连接在用户表, ext是备用, ![图片说明]...
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数...
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数...
最近在工作上遇到的这个问题,本来想用函数解决但是不允许,所以用了该方法,有点笨,只适合三级以下的比较少的父子关系,不推荐使用层级多的人使用哦。表名随便起的,就叫ppt1吧。表结构中含有:id,parent_id,...
我们在设计表的时候可能会把父子级关系放在一张表。 如:表o_Organization有字段PID,ID,[Description],Org_Type,OrgAll,...表是这样设计的,要怎么才能一条SQL查询一个父级ID下包含多少子集呢? 如下: ...
1 建表: CREATE TABLE test_tree ( test_id INT NOT NULL, pid INT, test_val VARCHAR(10), PRIMARY KEY (test_id) ...INSERT INTO test_tree VALUES(1, 0, '.NET');...INSERT INTO test_t
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值...
WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会 被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,...
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,...
初学SQL Server 做一个 分类父子级 后台数据库图示 根据已知的ID和Parent之间的对应关系列出 LevelTest字段对应的父子级关系 大体思路 游标最外层循环所有行数,内层while循环 循环父子层关系. 设置 退出 循环状态...
目录前言说明效果图初始化表结构和数据表结构插入示范数据SQL实现父节点向下递归所有子节点子节点向上递归所有父节点 前言 说明 一张school表,字段有主键id和父层级id,大学是最高的一个父节点,降序排序就是:大学...
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的...
1.sys_page_config表结构: ...表结构和数据语句: /* Navicat Premium Data Transfer Source Server : 127.0.0.1 Source Server Type : MySQL Source Server Version : 50536 Source Host : 127.0...
6嵌套子查询
all.sh开启MySQL库,用于存放hive的元数据sudo service mysql start启动hivehive在/data/hive3下下载数据库数据mkdir /data/hive3cd data/hive3wget http://192.168.1.100:60000/allfiles/hive3/bu...
Oracle select SQL 各类查询语句总结
notepad++是一个免费的、开放源码的文本和源代码编辑器。notepad++是用c++编程语言编写的,它以减少不必要的功能和简化过程而自豪,从而创建了一个轻便高效的文本记事本程序。实际上,这意味着高速和易访问的、用户友好的界面。 notepad++已经存在了将近20年,没有任何迹象表明它的受欢迎程度会下降。记事本绝对证明了你不需要投资在昂贵的软件来编写代码从舒适的自己的家。自己尝试一下,你就会明白为什么Notepad能坚持这么久。
汇编语言是一门低级程序设计语言,在数以千计的计算机语言中,有着不可替代的重要地位,广泛地用于开发操作系统内核、设备驱动程序等。随着近年来物联网、嵌入式系统的发展,汇编语言在行业中的地位也再次攀升,在2017年1月的TIOBE排行榜上,再次进入前十。对大多数学习计算机的人士而言,是理解计算机系统核心知识的一个桥梁,在人才培养中也起着特殊的作用。课程面向计算机初学者,介绍汇编语言程序设计基础的部分。 绍寄存器、内存、程序结构、模块化程序设计、中断等内容,课程重视对学习方法的指导和引导,提倡和支持用实践的方式开展学习,目标是培养学习者的自学能力和实践能力,以此支持对最新的汇编语言开发技术的学习。
本课程介绍了EasyUI常用控件的使用,EasyUI操作简单,能实现页面布局和元素操作,适合开发网站管理后台。学习本课程,可以掌握使用EasyUI+ssm开发网站管理后台、文件上传、权限菜单管理等实用技能。 本课程介绍了EasyUI常用控件的使用,EasyUI操作简单,能快速实现页面布局和元素操作,适合开发网站管理后台。