问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么往数据库里插入一个树形结构的表,并且用一句SQL语句将其遍历出来

发布网友 发布时间:2022-05-15 20:03

我来回答

3个回答

热心网友 时间:2024-03-20 14:28

树形结构统一使用下面的测试表与测试数据
CREATE TABLE test_tree (
test_id INT,
pid INT,
test_val VARCHAR(10),
PRIMARY KEY (test_id)
);

INSERT INTO test_tree VALUES(1, NULL, '.NET');
INSERT INTO test_tree VALUES(2, 1, 'C#');
INSERT INTO test_tree VALUES(3, 1, 'J#');
INSERT INTO test_tree VALUES(4, 1, 'ASP.NET');
INSERT INTO test_tree VALUES(5, 1, 'VB.NET');

INSERT INTO test_tree VALUES(6, NULL, 'J2EE');
INSERT INTO test_tree VALUES(7, 6, 'EJB');
INSERT INTO test_tree VALUES(8, 6, 'Servlet');
INSERT INTO test_tree VALUES(9, 6, 'JSP');

INSERT INTO test_tree VALUES(10, NULL, 'Database');
INSERT INTO test_tree VALUES(11, 10, 'DB2');
INSERT INTO test_tree VALUES(12, 10, 'MySQL');
INSERT INTO test_tree VALUES(13, 10, 'Oracle');
INSERT INTO test_tree VALUES(14, 10, 'SQL Server');

INSERT INTO test_tree VALUES(15, 13, 'PL/SQL');
INSERT INTO test_tree VALUES(16, 15, 'Function');
INSERT INTO test_tree VALUES(17, 15, 'Procere');
INSERT INTO test_tree VALUES(18, 15, 'Package');
INSERT INTO test_tree VALUES(19, 15, 'Cursor');

INSERT INTO test_tree VALUES(20, 14, 'T-SQL');

Oracle
使用 START WITH CONNECT BY
语句实现树状查询

SQL> ed
Wrote file afiedt.buf

1 SELECT
2 LPAD(' ', 2*(LEVEL-1)) || test_val AS test_val
3 FROM
4 test_tree
5 START WITH
6 test_id IN (1, 6, 10)
7* CONNECT BY PRIOR test_id = pid
SQL> /

TEST_VAL
-----------------------------------------------------------

.NET
C#
J#
ASP.NET
VB.NET
J2EE
EJB
Servlet
JSP
Database
DB2

TEST_VAL
-----------------------------------------------------------

MySQL
Oracle
PL/SQL
Function
Procere
Package
Cursor
SQL Server
T-SQL

20 rows selected.

SQL Server
使用 Common Table Expression (CTE) 来实现 递归调用。

1> WITH StepCTE
2> AS
3> (
4> SELECT
5> test_id,
6> pid,
7> test_val,
8> 1 as Lev
9> FROM
10> test_tree
11> WHERE
12> test_id IN (1,6,10)
13> UNION ALL
14> SELECT
15> T.test_id,
16> T.pid,
17> T.test_val,
18> CTE.Lev + 1
19> FROM
20> test_tree T INNER JOIN StepCTE CTE
21> ON T.pid = CTE.test_id
22> )
23> SELECT
24> test_id, pid, test_val, Lev
25> FROM StepCTE;
26> go
test_id pid test_val Lev
----------- ----------- ---------- -----------
1 NULL .NET 1
6 NULL J2EE 1
10 NULL Database 1
11 10 DB2 2
12 10 MySQL 2
13 10 Oracle 2
14 10 SQL Server 2
20 14 T-SQL 3
15 13 PL/SQL 3
16 15 Function 4
17 15 Procere 4
18 15 Package 4
19 15 Cursor 4
7 6 EJB 2
8 6 Servlet 2
9 6 JSP 2
2 1 C# 2
3 1 J# 2
4 1 ASP.NET 2
5 1 VB.NET 2

(20 行受影响)

热心网友 时间:2024-03-20 14:28

ID Value PID
0 根节点 null
1 节点1 0
2 节点2 0
3 节点3 1
..........

然后查询出来 再形成树就可以了

热心网友 时间:2024-03-20 14:28

现在最流行的商业数据库全是关系数据库,只是一对一的,虽然表以是B树的形式存储的,不过你如果只用数据库,那么无法完成树形存储,不过可以通过以文本形式存储XML来解决存取树形结构的问题... 就是把XML当做TEXT 存到数据库中,然后再用XML解析器来操作树,XML本来就是以树形存储的...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ccie安全到底是讲些什么 血型亲子鉴定原理是什么? 亲子医学鉴定的方法是什么?? 厦门劲草信息科技有限公司怎么样? 河北劲草信息科技有限公司怎么样? 老公妈妈去世了,带的孝帕被老公带回家,影响吗? ...值和劳动定额有什么区别?敢请高手赐教,越详细越好!谢谢! WPS教程怎么取消打印预览分割线 西安的消费水平是高吗? 西安的消费水平怎么样 联通号码销户到营业厅快不 我想在电脑上装一个五笔输入法,但是上不了网,怎么办? 联通号怎么注销 联通号码如何网上注销 抽水泵抽水有时候一打开开关家里的电度表就自动跳闸 抽水机 使用完后断电 跳闸 修心养性,视若无睹。是什么意思 水塔一用自动上水开关漏电保护器就跳闸是怎么回事? 为什么一打上潜水泵的闸刀开关抽水,漏电开关就跳闸? 为什么开抽水机会自动跳闸 成语,视若什么 熟视无睹的意思 为什么家里220v小水泵一抽水变压器总开关就跳闸了? 自动抽水开关狂跳不止怎么办? 豆腐蘑菇猪肝可以一起煮汤吗 祝瑞莲千万个理由词谱 有人在长沙打过美白针吗?怎么样啊效果? 请问有无人打过美白针? 有人打过美白针吗 来说说 有人打过美白针吗?多久见效果?多少钱一针? 因为对mssql数据库不熟悉,我把一个易语言源码改为mysql,遇到一个问题一个加载树形框的sql语句不会 php+mysql怎么实现无限级别分类,数据库怎么设计?一条SQL语句读出数据然后... 疑难问题是什么概念? 路程 相遇问题的所有概念 现在开车用什么地图导航更精准 什么驾车导航好用? 酶标仪有关问题 酶标仪的使用 协议离婚双方自愿书怎么写 anthos2010是什么仪器 bbs安图酶标仪价格一般多少 酶标仪的选购有哪些注意点 安图2010酶标仪是否荧光素酶标仪 电子商务理念 一、 请就电子商务系统网站的规划与设计作一个简要的说明 什么是携号转网呢? flash怎么设置文字出现效果 OPPO A3价格多少钱 具体参数配置一览 计算机的说明书600字作文 电脑说明文600字