当前位置:主页>delphi7/进销存和数据库> 文章内容

请教一个很难的SQL语句

发布时间:2010-02-03 | QQ免费站
1楼: Foxpro数据库 有下表:Table 名称 下位词 世界 欧洲 世界 亚洲 世界 美洲 ……………… 美洲 北美洲 美洲 南美洲 北美洲 加拿大 北美洲 美国 南美洲 巴西 南美洲 智利 欧洲 德国 欧洲 英国 ………………… 我想写这样一条SQL语句: 输入一个词,把它的所有下为词查询出来 比如我输入“美洲”,应该返回的查询结果是: 美洲、北美洲、南美洲、加拿大、美国、智利、巴西 我知道这叫单表连接查询,但是我只会写一层的: Select Table1.名称 From Table Table1, Table Table2 Where Table1.名称=‘美洲’And Table1.下为词=Table2.名称 这样只能查出来:北美洲、南美洲。剩下的查不出来了。 请高手们帮帮忙!!! 字串2

2楼: 如果是在foxpro中的话.条件就用: ‘美洲‘ $ 下位词 在SQL在,也是用一个符号,我记不清是什么号了.

字串4

3楼: 能具体说说吗?? 字串7

4楼: 试试这个:对目前的数据支持,但如果再细分就不行了,比如中国再细分为各个省。 SELECT 名称 FROM TABLE WHERE 名称 LIKE ‘%美洲%‘ UNION SELECT 下位词 FROM table WHERE 名称 LIKE ‘%美洲%‘

字串8

5楼: Foxpro好久没有用了,应该与标准Sql差不多吧 字串4

6楼: FOXPRO好象可以自定义函数,写个函数判断两个名字是否是父子关系,查询时用函数判断就行了

字串9

7楼: 引力 你的方法肯定是不行的 我上面的数据库就是随便举的片断 各位能不能具体说说,别那么模棱两可行吗?? 字串8

8楼: sql = “SELECT * FROM table WHERE 字段1 LIKE %‘“strSearch“‘% OR 字段2 LIKE %‘“ strSearch “‘% “
字串3

9楼: 如果知道层次可以这样(假设3层),不过我用的是SQL SERVER select a.名称,a.下位词,b.下位词,c.下位词 from (table a left outer join (table b left outer join table c on b.下位词=c.名称) on a.下位词=b.名称) where a.名称=‘你要的‘
字串4

10楼: 要知道层次我就不问了……………… 难道大家没看清楚我的问题???还是我没有表达清楚????

字串8

11楼: 我曾经也遇到过这种问题,后来是用循环、递归搞定的,效率是不敢恭维了。

字串8

12楼: 楼上的能说说用递归如何写吗?? 字串1

13楼: 如果你能修改你的表设计的话,倒是有个稍微简单点的办法 给你的表加上一个code字段,假设定义每一层code的长度为4位,那你的那个表可以表示成这样: 名称 下位词 code 世界 0000 世界 欧洲 00001111 世界 亚洲 00002222 世界 美洲 00003333 ……………… 美洲 北美洲 000033331111 美洲 南美洲 000033332222 北美洲 加拿大 0000333311111111 北美洲 美国 0000333311112222 南美洲 巴西 0000333322221111 南美洲 智利 0000333322222222 欧洲 德国 000011111111 欧洲 英国 000011112222 ------------------------ 这样子就简单了,一个like就出来了。
字串5

14楼: select 名称 , 下位词 where 名称 like ‘%美洲%‘ 有点没看清楚你的问题 字串5

15楼: 小猪你的建议到是不错,但是修改表是不可能的了。因为我的真正表中的内容比较专业,不是这么简单的东西,我也搞不清出每个词到底有几层关系。10000多条记录呢…… 字串4

16楼: 我听说SQL SERVER有一种办法可以解决这个问题,有人知道吗??我倒是可以考虑换数据库。
字串4

17楼: 也许用SQL_Server的储存过程方便点, 字串2

18楼: 强烈建议更换数据库为SQL SERVER,在存储过程中使用游标可以解决你的问题。 游标可以按条访问数据库中的记录,然后用循环、递归搞定,具体方法略。[:)] 字串9

19楼: 我已经研究你提的这个问题了,不可能实现: 美洲、北美洲、南美洲、加拿大、美国、智利、巴西 我认为最多,也是最有意义的实现方式是: 美洲、北美洲、加拿大 美洲、北美洲、美国 美洲、南美洲、智利 美洲、南美洲、巴西 不用再尝试了,我用过各种联接方式了,不行! 你们想想看,加拿大、美国、智利、巴西 之间有什么内在的本质的关系 我所指的是你的提供的表根本在现在中是不可能存在的

字串4

20楼: 我想大家还是看一下我在努力以上问题时所用语句: SELECT a.名称,a.下位词,b.名称,b.下位词,c.名称,c.下位词,d.名称,d.下位词 FROM zz as a INNER JOIN zz as b INNER JOIN zz as c INNER JOIN zz as d ON a.下位词 = b.名称 and b.下位词 = c.名称 and c.下位词 = d.名称 where a.名称 = ‘美洲‘ ORDER BY a.名称 SELECT a.名称,a.下位词,b.名称,b.下位词,c.名称,c.下位词,d.名称,d.下位词 FROM zz as a ,zz as b ,zz as c ,zz as d where a.名称 = ‘美洲‘ and a.下位词 = b.名称 and b.下位词 = c.名称 and c.下位词 = d.名称 ORDER BY a.名称 字串3

21楼: 真的这么难吗? 很久没用过foxpro了,如果真能自定义函数的话 就按我下面的思路去做吧 http://www.delphibbs.com/keylife/iblog_show.asp?xid=7547 字串2

22楼: jacksoft_Edgen 你那么写能查出所有的下位词吗??用穷举肯定是不行的 我用数组的方法解决了

字串7

23楼: 这里唯一让我觉得有道理的方案就是“小猪”的那个 字串7

24楼: Oracel的SQL我会写,用connect by……start with。fox的不懂。
字串1

25楼: 看来我的数据库确实太老了

字串2