设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 7891|回复: 27
打印 上一主题 下一主题

[其它] 超难问题

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2012-7-18 10:42:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 鱼儿游游 于 2012-7-18 14:49 编辑

不用临时表的方法,如何用SQL语句从左图显示的数据表得到图1、图2的记录集(即查找指定节点的所有子节点):



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-7-18 11:02:13 | 只看该作者
{:soso_e112:}

点击这里给我发消息

3#
发表于 2012-7-18 11:56:13 | 只看该作者
????
4#
发表于 2012-7-18 12:40:04 | 只看该作者
很简单的问题嘛。有两种解决办法:
方法一:定义个数组,其元素存放各类ParentID,比如A(1)=“2,12,11”,A(2)="3,7",剩下怎么搞法你懂的。
方法二:在商品分类表中增加一个字段,比如叫做Class,该字段用于存放ParentID之上的大类数据,剩下怎么搞法你懂的。

点击这里给我发消息

5#
 楼主| 发表于 2012-7-18 14:30:39 | 只看该作者
t小宝 发表于 2012-7-18 11:56
????

小宝,你有什么好方法?

点击这里给我发消息

6#
发表于 2012-7-18 15:44:59 | 只看该作者
搞不懂你什么意思,这个SQL语句不是很简单么。。。
Select CategoryID,CategoryLabel From 商品分类表 Where ParentID=2
Select CategoryID,CategoryLabel From 商品分类表 Where ParentID=3
7#
发表于 2012-7-18 16:33:00 | 只看该作者


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

8#
 楼主| 发表于 2012-7-18 22:52:04 | 只看该作者
t小宝 发表于 2012-7-18 15:44
搞不懂你什么意思,这个SQL语句不是很简单么。。。
Select CategoryID,CategoryLabel From 商品分类表 Whe ...

是要列出指定节点下的所有节点呀。

点击这里给我发消息

9#
 楼主| 发表于 2012-7-18 22:55:08 | 只看该作者
todaynew 发表于 2012-7-18 16:33

多谢斑竹出手,但不能完全达到我的要求,因为,数据源是动态的。

点击这里给我发消息

10#
 楼主| 发表于 2012-7-18 23:18:49 | 只看该作者
本帖最后由 鱼儿游游 于 2012-7-18 23:33 编辑

我现在的方法是用了临时表(LSB、LSB1):调用下面的过程(GetAllSub),生成的数据表LSB就是我要的结果。
我想实现:不用临时表,只用SQL语句也能得到同样结果的记录集。
  1. Sub test()
  2.     GetAllSub 2
  3. End Sub

  4. Public Sub GetAllSub(ByVal intParentID As Integer)
  5.     Dim strSQL    As String
  6.     Dim blnSaerch As Boolean
  7.     strSQL = "SELECT CategoryID,CategoryLabel INTO LSB FROM GoodsCategory WHERE ParentID=" + CStr(intParentID)
  8.     DoCmd.SetWarnings False
  9.     DoCmd.RunSQL strSQL
  10.    
  11.     blnSaerch = True
  12.     While blnSaerch
  13.         strSQL = "SELECT CategoryID,CategoryLabel INTO LSB1 FROM GoodsCategory WHERE ParentID IN (SELECT CategoryID FROM LSB) AND CategoryID NOT IN (SELECT CategoryID FROM LSB)"
  14.         DoCmd.RunSQL strSQL
  15.         If DCount("CategoryID", "LSB1") > 0 Then
  16.             strSQL = "INSERT INTO LSB (CategoryID,CategoryLabel) SELECT CategoryID,CategoryLabel FROM LSB1"
  17.             DoCmd.RunSQL strSQL
  18.         Else
  19.             blnSaerch = False
  20.         End If
  21.     Wend
  22. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-24 15:23 , Processed in 0.107926 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表