首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

SQL语句大难题啊该怎么处理

2012-01-16 
SQL语句大难题啊!!!!!!!!!!!!!现有表如下:idnamefatherID1公司02行政部13财务部14开发部15人力资源部26培

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
[解决办法]
我做都基于这种树形结构的表,没有说不可以查的,没有做不到的,只有想不到的

热点排行