当前位置:首页 » 编程语言 » sql树状结构
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql树状结构

发布时间: 2022-06-11 03:54:23

sql里树状结构的表,找树叶节点。

找树叶简单啊

SELECT
*
FROM
表 main
WHERE
NOT EXISTS (
SELECT * FROM 表 sub WHERE main.ID = sub.ParentID
)

也就是对于 表的 每一行, 不存在有其他行的数据, ParentID 等于 当前行的 ID

❷ SQL重组树状结构

k1 k2 v2 k1 k2 v2
k2 k3 v3 k2 k3 v3
k3 k4 v4 k1 k3 v3
k2 k5 v5 k3 k4 v4
k2 k4 v4
k1 k4 v4
k2 k5 v5
先补全然后删选
():select f_k from tree where filter = Y
select f_k, s_k, s_v, filter from tree2
where f_k not in () and s_k not in ()

❸ SQL Server 2000 树状结构

展bom表的话,一般写procere,用递归调用自己查找下阶,直到最后阶

----
这个。。。。比较复杂,我只写过类似展bom的proceudre,oracle的
但是不知道怎么说。。。。。
要用到递归,游标
而且bom层数多的话跑起来速度很慢,不小心还会死循环。。。。

简单来说,就是procere一次展一层,比如把需展的成品A展到半成品B,C
然后把半成品B,C当做成品,重复调用自己展下一层DEF。。。直到到底为止(也可以自己设定展到几层就停)

❹ SQL 查询问题.树状结构数据.逆向查询.

有很多种写法的,拿出包含1得,然后判断是否存在2
SELECT DISTINCT A
FROM TAB t1
WHERE B = '1' AND EXISTS (SELECT 1 FROM TAB WHERE A = t1.A and B = '2')

2)拿出1得,2得各自纪录,然后连接
SELECT t1.A
FROM (SELECT DISTINCT A FROM TAB WHERE B = '1') t1,
(SELECT DISTINCT A FROM TAB WHERE B = '2') t2
WHERE t1.A = t2.A

3)拿出1, 2 然后数个数
SELECT A
FROM TAB
WHERE B IN ('1', '2')
GROUP BY A
HAVING COUNT(DISTINCT B) >= 2

❺ sql数据库是通过创建还是查询实现树状结构

直接给你例子吧,,,适用于SQL2005及以上版本
CreatetableStorage_Depository
(
DIDvarchar(50)notnullprimarykey,
DNamevarchar(50)notnull,
PIDvarchar(50)null
)
insertintoStorage_Depository(DID,DName,PID)
select'A','A仓库',null
unionall
select'A-1','A-1仓库','A'
unionall
select'A-2','A-2仓库','A'
unionall
select'A-1-1','A-1-1仓库','A-1'
unionall
select'B','B仓库',null

SELECT*FROMStorage_Depository
--查出A仓下面的所有子仓
withw_Storage_Depositoryas
(
selectDID,DName,PIDfromStorage_DepositorywhereDID='A'
unionall
selectA.DID,A.DName,A.PIDfromStorage_DepositoryA,w_Storage_DepositoryBwhereA.PID=B.DID
)
select*fromw_Storage_Depository

--要查出A-1-1仓的所有上级仓

withw_Storage_Depositoryas
(
selectDID,DName,PIDfromStorage_DepositorywhereDID='A-1-1'
unionall
selectA.DID,A.DName,A.PIDfromStorage_DepositoryA,
w_Storage_DepositoryBwhereA.DID=B.PID
)
select*fromw_Storage_Depository

❻ 建立一个树形结构的SQL表 3实现的功能

主要是要有ID,PID两个字段,下面是我用的一个表,仅供参考:
CREATE TABLE [dbo].[Sys_Menu](
[ID] [int] NOT NULL,
[Code] [varchar](50) NOT NULL,
[PID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[Url] [varchar](100) NULL,
[STATE] [bit] NOT NULL,
[IsSelected] [bit] NULL
) ON [PRIMARY]

GO

❼ sql server怎么对树形结构表的节点进行拼接

DECLARE @temp nvarchar(MAX)='',@pid bigint=3;
WHILE @pid<>0 BEGIN IF @temp=''
SELECT @temp=TypeName,@pid=ParentId
FROM [dbo].[Test]
WHERE Id=@pid;
ELSE
SELECT @temp=(TypeName+'->'+@temp),@pid=ParentId
FROM [dbo].[Test]
WHERE Id=@pid;
END;
SELECT @temp AS TypeName;

❽ 如何用SQL解决树查询问题,急!!!

oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select * from tablename start with cond1
connect by prior cond2
where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
id,parentid。那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。

COND3是过滤条件,用于对返回的所有记录进行过滤。

❾ sql里树形结构分组排序

createtableT1(thisvarchar(10),parentvarchar(10))
insertintoT1(this,parent)
values('id1',null)
,('id2',null)
,('id3','id1')
,('id4','id2')
,('id5','id3')
,('id6','id3')
,('id7','id4')
,('id8','id7')

--sqlserver的cte功能
withtree(this,parent,root,depth)as(
selectthis,parent,thisasroot,
unionall
selecta.this,a.parent,b.root,b.depth+1asdepthfromT1a,treebwherea.parent=b.this
)
selectthis,parent,root,depth
fromtree
orderbyroot,depth,this

❿ 求一条sql语句,树形结构

最后SQL语句返回的结果是什么?看一下以下语句行不行?

WITHAAS(SELECTpk_compID,Name,pk_fathercompPIDFROMcompany
UNIONALL
SELECTpk_dept,DeptName,pk_compFROMdept),
BAS
(SELECTCAST(NameASVARCHAR(200))Name,PID,IDFROMAWHEREPID=0
UNIONALL
SELECTCAST(B.Name+''+A.NameASVARCHAR(200)),A.PID,A.ID
FROMBJOINAONB.ID=A.PID)
SELECTNameFROMB