如何才能管好VMware环境下的虚拟资产?
2009-12-14 14:54
232 查看
问题:
有一张表,包含ID和Parent ID,也就是说,其中一条数据的ID可能会作为另一条数据的Parent ID出现。
现在我想查询出和一个指定ID有联系的所有数据,不管是父节点的兄弟节点,还是它的子节点,或它的子节点的子节点,兄弟节点的子节点,等等。
例如:
table:test
ID Parent ID
1 5
2 1
3 2
4 1
5 -
6 5
7 -
8 4
9 -
10 6
当指定的ID是1,2,3,4,5,6,8,10任意一个的时候,那么这几条数据都应该被查询出来。(因为需要查询出所有有联系的数据,不管是子节点还是父节点还是兄弟节点甚至是延伸出来的数据,都应该被查询出来)
当ID是9的时候就只有一条ID为9的数据。
这个查询能否使用一条SQL语句就实现了呢?这是一个函数来实现的,这个函数可以多次执行SQL以便完善SQL语句,但是最终还是需要仅仅一条SELECT语句能得到一个完整的结果集。
请大家帮帮忙,非常感谢。
(目前我的方法是使用迭代的方法,不断地增加SQL语句中的where子语句以便获取所有数据,但是这个方法有一个限制,SQL语句的长度是有限制的,所以希望大家能想想起他方法)
我的回答:
你的问题1个SQL应该实现不了,不过这样就行了,也很简单,你可以多些数据测测,如果有其他更好的方法可以告诉我
---------------------建立 Temporarily 临时表----------------------------
DECLARE @Temporarily TABLE (Temporarilyid int, TemporarilyPId int)
---------------------申明临时变量a,b,存储你的第一个查询条件,这个固定----------------------------
DECLARE @a int
set @a=(SELECT ID1 as a FROM test WHERE ID1 = 1)
DECLARE @b int
set @b=(SELECT ParentID as b FROM test WHERE ID1 = 1)
---------------------将第一条结果插入临时表----------------------------
INSERT INTO @Temporarily VALUES (@a,@b)
---------------------循环执行,循环数为你记录的条数,这个不固定----------------------------
DECLARE @i int
SET @i = 1
WHILE @i <= 10
BEGIN
---------------------临时变量e,返回表的某条数据是否符合你的子父关联要求----------------------------
DECLARE @e int
set @e=(SELECT distinct Temporarilyid as e FROM @Temporarily WHERE Temporarilyid IN(SELECT ParentID FROM test WHERE ID1 = @i) or TemporarilyPId in(SELECT ID1 FROM test WHERE ID1 = @i))
---------------------符合,执行插入操作----------------------------
IF @e>0
BEGIN
set @a=(SELECT ID1 as c FROM test WHERE ID1 = @i)
set @b=(SELECT ParentID as d FROM test WHERE ID1 = @i)
INSERT INTO @Temporarily VALUES (@a,@b)
END
SET @i = @i + 1
END
---------------------显示结果集----------------------------
SELECT Temporarilyid AS a,TemporarilyPId AS b FROM @Temporarily
觉对可以满足你说的要求,多少条数据都可以,具体说一条sql语句执行,我还没想到可以的本文出自 “www.faako.com” 博客,请务必保留此出处http://leyton.blog.51cto.com/892183/234498
有一张表,包含ID和Parent ID,也就是说,其中一条数据的ID可能会作为另一条数据的Parent ID出现。
现在我想查询出和一个指定ID有联系的所有数据,不管是父节点的兄弟节点,还是它的子节点,或它的子节点的子节点,兄弟节点的子节点,等等。
例如:
table:test
ID Parent ID
1 5
2 1
3 2
4 1
5 -
6 5
7 -
8 4
9 -
10 6
当指定的ID是1,2,3,4,5,6,8,10任意一个的时候,那么这几条数据都应该被查询出来。(因为需要查询出所有有联系的数据,不管是子节点还是父节点还是兄弟节点甚至是延伸出来的数据,都应该被查询出来)
当ID是9的时候就只有一条ID为9的数据。
这个查询能否使用一条SQL语句就实现了呢?这是一个函数来实现的,这个函数可以多次执行SQL以便完善SQL语句,但是最终还是需要仅仅一条SELECT语句能得到一个完整的结果集。
请大家帮帮忙,非常感谢。
(目前我的方法是使用迭代的方法,不断地增加SQL语句中的where子语句以便获取所有数据,但是这个方法有一个限制,SQL语句的长度是有限制的,所以希望大家能想想起他方法)
我的回答:
你的问题1个SQL应该实现不了,不过这样就行了,也很简单,你可以多些数据测测,如果有其他更好的方法可以告诉我
---------------------建立 Temporarily 临时表----------------------------
DECLARE @Temporarily TABLE (Temporarilyid int, TemporarilyPId int)
---------------------申明临时变量a,b,存储你的第一个查询条件,这个固定----------------------------
DECLARE @a int
set @a=(SELECT ID1 as a FROM test WHERE ID1 = 1)
DECLARE @b int
set @b=(SELECT ParentID as b FROM test WHERE ID1 = 1)
---------------------将第一条结果插入临时表----------------------------
INSERT INTO @Temporarily VALUES (@a,@b)
---------------------循环执行,循环数为你记录的条数,这个不固定----------------------------
DECLARE @i int
SET @i = 1
WHILE @i <= 10
BEGIN
---------------------临时变量e,返回表的某条数据是否符合你的子父关联要求----------------------------
DECLARE @e int
set @e=(SELECT distinct Temporarilyid as e FROM @Temporarily WHERE Temporarilyid IN(SELECT ParentID FROM test WHERE ID1 = @i) or TemporarilyPId in(SELECT ID1 FROM test WHERE ID1 = @i))
---------------------符合,执行插入操作----------------------------
IF @e>0
BEGIN
set @a=(SELECT ID1 as c FROM test WHERE ID1 = @i)
set @b=(SELECT ParentID as d FROM test WHERE ID1 = @i)
INSERT INTO @Temporarily VALUES (@a,@b)
END
SET @i = @i + 1
END
---------------------显示结果集----------------------------
SELECT Temporarilyid AS a,TemporarilyPId AS b FROM @Temporarily
觉对可以满足你说的要求,多少条数据都可以,具体说一条sql语句执行,我还没想到可以的本文出自 “www.faako.com” 博客,请务必保留此出处http://leyton.blog.51cto.com/892183/234498
相关文章推荐
- Unix/Linux环境C编程入门教程(11) 开发环境搭建VMWare虚拟安装之虚拟化检测
- 【专题四】跨平台/异构IT基础架构是实施虚拟化的拦路虎吗?――如何跨平台管理数据中心虚拟环境?
- 如何在VM ware虚拟环境下建立纯软双机热备
- 【环境配置】Win7下vmware虚拟网卡显示未识别的网络
- 如何利用VMware创建测试环境
- 如何设置或配置pocket pc,才能让电脑ping通,实现虚拟设备和电脑在同一局域网内;
- 在Windows下如何创建虚拟环境(默认情况下)
- 如何在Linux中用命令行工具管理KVM虚拟环境
- 如何判断VPS是基于哪种虚拟技术?Xen、OpenVZ、Xen HVM还是VMware
- 如何在VM ware虚拟环境下建立纯软双机热备
- 如何在VM ware虚拟环境下建立纯软双机热备
- VMware虚拟环境中Centos7 操作系统添加硬盘
- pycharm 虚拟环境如何手动安装第三方包(附带pywin32在windows的安装)
- 虚拟环境的安装包如何导出,如何安装到新的虚拟环境中,virtualenv
- Python学习——如何创建虚拟环境Virtualenv
- 如何在VM ware虚拟环境下建立纯软双机热备
- 如何设置VMware中Linux命令行环境全屏
- 如何在VM ware虚拟环境下建立纯软双机热备
- 如何在linux创建python虚拟环境
- 如何使用secureCRT连接vmware中的虚拟主机?