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

sql树型结构的归集算法

发布时间: 2023-05-22 21:15:20

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

找树叶简单啊

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

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

② php:树形结构的算法


产品分类,多级的树状结构的论坛,邮件列表等许多地方我们都会遇到这样的问题:如何存储多级结构的数据?
在PHP的应用中,提供后台数据存储的通常是关系型数据库,它能够保存大量的数据,提供高效的数据检索和更新服务。然而关系型数据的基本形式是纵横交错的表,是一个平面的结构,如果要将多级树蚂耐消状结构存储在关系型数据库里就需要进行合理的翻译工作。接下来我会将自己的所见所闻和一些实用的经验和大家探讨一下。
层级结构的数据保存在平面的数据库中基本上有两种闷知常用设计方法:
毗邻目录模式(adjacency list model)
预排序遍历树算法(modified preorder tree traversal algorithm)
我不是计算机专业的,也没有亩碧学过什么数据结构的东西,所以这两个名字都是我自己按照字面的意思翻的,如果说错了还请多多指教。
这两个东西听着好像很吓人,其实非常容易理解。这里我用一个简单食品目录作为我们的示例数据。 我们的数据结构是这样的:
Food
|
|---Fruit
| |
| |---Red
| | |
| | |--Cherry
| |
| |---Yellow
| |
| |--Banana
|
|---Meat
|
|--Beef
|
|--Pork
为了照顾那些英文一塌糊涂的PHP爱好者
Food:食物
Fruit:水果
Red:红色
Cherry:樱桃
Yellow:黄色
Banana:香蕉
Meat:肉类
Beef:牛肉
Pork:猪肉

③ sql 树形结构递归查询问题 求助求助求助

简单示例
createtableTree
(
IDintidentity(1,1)primarykeynotnull,
Namevarchar(20)notnull,
Parentvarchar(20)null
)
go
insertTreevalues('大学',null)
insertTreevalues('学院','大学')
insertTreevalues('计算机学院','学院')前芹
insertTreevalues('网络工程','计算机学袭行院')
insertTreevalues('信息管理','计算机学院')
insertTreevalues('电信学院','学院')
insertTreevalues('教务处','大学')
insertTreevalues('材料科','教务处')
insertTreevalues('招生办','大学')
go
withCTEas
(
-->Begin一个定位点成员
selectID,Name,Parent,cast(Nameasnvarchar(max))asTE,
-->End
unionall
-->Begin一个递归成员
selectTree.ID,Tree.Name,Tree.Parent,cast(replicate('',len(CTE.TE))+'|_'+Tree.nameasnvarchar(MAX))asTE,Levle+1asLevle
慧禅毕fromTreeinnerjoinCTE
onTree.Parent=CTE.Name
-->End
)
select*fromCTEorderbyID

④ sql 怎么递归查询的方法:

1.创建测试表,createtabletest_connect(idnumber,p_idnumber);

⑤ sql server树形结构表统计每一级树形下的所有子集数,

有如下数据表
create table tb(id varchar(3) , pid varchar(3) , name varchar(10));
insert into tb values('001' , null , '广东省');
insert into tb values('002' , '001' , '广州市');
insert into tb values('003' , '001' , '深圳市') ;
insert into tb values('004' , '002' , '天河区') ;
insert into tb values('005' , '003' , '罗湖区');
insert into tb values('006' , '003' , '福田区') ;
insert into tb values('007' , '003' , '宝安区') ;
insert into tb values('008' , '007' , '西乡镇') ;
insert into tb values('009' , '007' , '龙华镇');
insert into tb values('010' , '007' , '松岗镇');

假如我们要查询ID为003的数据的所有子节点我们可以使用CTE 递归查询完成...

with cte as
(
select a.id,a.name,a.pid from tb a where id='003'
union all
select k.id,k.name,k.pid from tb k inner join cte c on c.id = k.pid
)select * from cte

查询结果如下:
003 深圳市 001
005 罗湖区 003
006 福田区 003
007 宝安区 003
008 西乡镇 007
009 龙华镇 007
010 松岗镇 007

⑥ 怎样设计树形目录的数据库用SQL

create table catelog(
id int identity(1,1) not null primary key,
description nvarchar(50),
parent_id int -- 存放父节点的ID
)
go
-- 建索引提高查询性能。
create index ix_catelog_parent on catelog(parent_id)
go

⑦ Linq To Sql 如何实现递归查询 树形结构

--构造测试数据: 只作演示用
CREATE TABLE [dbo].[Tim_LinqTable](
[Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Parent] int NOT NULL,
)
GO

INSERT INTO [Tim_LinqTable]
SELECT 'A',0 UNION ALL
SELECT 'A1',1 UNION ALL
SELECT 'A2',1 UNION ALL
SELECT 'B1',2 UNION ALL
SELECT 'B2',3 UNION ALL
SELECT 'C1',4 UNION ALL
SELECT 'C2',4 UNION ALL
SELECT 'D1',5 UNION ALL
SELECT 'D2',5 UNION ALL
SELECT 'D3',5
GO

WITH temp
AS
(
SELECT * FROM [Tim_LinqTable] WHERE Parent = 3
UNION ALL
SELECT m.* FROM [Tim_LinqTable] AS m
INNER JOIN temp AS child ON m.Parent = child.Id
)
SELECT * FROM temp
GO

--查询 Parent=3 的所有子数据结果如下罩闹:
Id Name Parent
----------- -------------------------------------------------- -----------
5 B2 3
8 D1 5
9 D2 5
10 D3 5

(4 row(s) affected)

//好中键,下物培罩边来看看用C#怎么实现上边的SQL语句吧:
void Main()
{
var query=GetClassID(3);
Console.WriteLine("Id\tName\tParent");
query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));
/*
Id Name Parent
5 B2 3
8 D1 5
9 D2 5
10 D3 5
*/
}
public IEnumerable<Tim_LinqTable> GetClassID(int p_id)
{
var query = from c in this.Tim_LinqTables
where c.Parent == p_id
select c;

return query.ToList().Concat(query.ToList().SelectMany(t => GetClassID(t.Id)));
}

⑧ 请教一个关于树形分类的SQL写法,急!!

我有一张产品分类表,结构如下ID
产品编码
产品名称1
01
a
--为一级分类2
0102
b
--二级分类3
010512
c
--三级分类物塌说明产编蔽蚂隐码长度为2代表一级分宏厅类,长度为4代表二级分类,依次类推现在我想要变成如下结构:ID
产品编码
产品一级分类名称
产品二级分类名称
产品三级分类名称1
01
a

2
0102
a
b3
010512
a
c

⑨ 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