SQL语句大难题啊!!!!!!!!!!!!!
现有表如下:
id name fatherID
1 公司 0
2 行政部 1
3 财务部 1
4 开发部 1
5 人力资源部 2
6 培训部 5
7 外贸部 1
8 技术部 4
9 测试部 8
现在传个id进来.如果传的id是2,也就是行政部的id.显示结果要求是:
id name fatherID
1 公司 0
2 行政部 1
3 财务部 1
4 开发部 1
7 外贸部 1
8 技术部 4
9 测试部 8
也就是说除了子节点(包括子节点下的子节点)外都显示.这个的SQL语句怎么写啊
[解决办法]
看不懂你说的是什么?LZ,说的详细点啊
[解决办法]
越看越晕
------解决方案--------------------
很简单的拉兄弟,递归要是也不会的话再问。
[解决办法]
对对,没看太好.
select * from 表名 where fatherID <> "ID " and fatherid not in (select id from 表名 where fatehrID = "ID "))
[解决办法]
To chenczy(过来看看)
对对,没看太好.
select * from 表名 where fatherID <> "ID " and fatherid not in (select id from 表名 where fatehrID = "ID "))
==============================================》
兄弟,你再想想,你和浪人犯一个错误哦。
[解决办法]
CREATE PROCEDURE Search
@ID int
AS
CREATE TABLE #Search(ID int)
DECLARE @myid int
DECLARE ID_CURSOR CURSOR FOR
SELECT ID FROM table1 WHERE fatherID=@ID
OPEN ID_CURSOR
FETCH NEXT FROM ID_Cursor INTO @myid
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO #Search SELECT ID FROM table1 WHERE ID=@myid
IF((SELECT Count(ID) FROM table1 WHERE fatherID=@myid) <> 0)
BEGIN
INSERT INTO #Search SELECT ID FROM table1 WHERE fatherID=@myid
SET @myid=(SELECT ID FROM table1 WHERE fatherID=@myid)
CONTINUE
END
FETCH NEXT FROM ID_Cursor INTO @myid
END
CLOSE ID_Cursor
DEALLOCATE ID_Cursor
SELECT * FROM table1 WHERE ID NOT IN(SELECT ID FROM #Search WHERE ID=table1.ID)
经测试,OK,刚才没有考虑多个子节点的情况
[解决办法]
那我就不清楚了,没有用过ACCESS数据库!!!
[解决办法]
select * from 主表 where id not in (select id from sqlfun(@id));
[解决办法]
zou2062() 方法可以,#Search表是不是要销毁掉
[解决办法]
zou2062() 的 方法有点问题
SET @myid=(SELECT ID FROM table1 WHERE fatherID=@myid)
当字节点不只一个字节点的时候 这条语句就会报错了!
所以我感觉还要有个 循环,或游标 去存储 @myid
[解决办法]
这么一个简单的表需要表达这么复杂吗?可惜我还没有明白lz的具体意思
[解决办法]
在access中没有存储过程,你可以在程序中将id=2下面的子结点子子结点的ID号找出来,然后指导结点ID写到
access中一个临时表(tmp)中,然后
select * from 部门表 where id not in(select id from tmp)找到你要的数据
[解决办法]
临时表系统自动会销毁的.如果你自己想销毁,直接删除就可以了.
三层的树多个节点的今天我想了下,解决了,不过语句有改动,
但是如果4层5层甚至更多,如果不加参数利用循环我还没想到!
希望高人现身说法
让小弟学习下,小弟入门不久。
[解决办法]
up
[解决办法]
我做都基于这种树形结构的表,没有说不可以查的,没有做不到的,只有想不到的