首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL,求一SQL语句(续)

2012-01-13 
SQL高手请进,求一SQL语句(续)昨天问题r的网址:http://community.csdn.net/Expert/topic/5675/5675338.xml?

SQL高手请进,求一SQL语句(续)
昨天问题r的网址:
http://community.csdn.net/Expert/topic/5675/5675338.xml?temp=.8641779
里面的问题:
表一:
id       srotid     name       arr1     arr2    
101         10         A-001       1;         1;
102         10         A-002       1;2;     1;
103         11         A-003       3;         3;
104         11         A-004       4;         3;4;

表二:
id       text1                 text2
1         aaa;bbb;         ccc;ddd;
2         eee;fff;         ggg;hhh;

现在假如客户输入 "aaa "就可以搜索出以下纪录:(注:下面结果中的arr1、arr2里面所含有的1,就是表三中含有 "aaa "的ID号.)之前可能是我要求的功能太多了,反而乱了,现在只要可以出现以下的显示结果就行了:

id       srotid     name       arr1     arr2    
101         10         A-001       1;         1;
102         10         A-002       1;2;     1;


现在的数据库暂时为Access,所以SQL有一些函数用不上的.希望大虾们指点一下.
谢谢.

以上是昨天的问题.

昨天以为问题可以告一段落了,谁知昨晚一引用下面的模糊搜索就变得超慢了,一执行起来要19秒左右.但是这个模糊搜索又是必不可少的.
公司也下了最后的通告要我这个星期内搞定,好无奈.
paoluo、wangtiecheng、Haiwer、ORARichard等高手们
帮忙能不能再帮忙把这个语句优化一下,万分感谢。


****************模糊搜索字符串开结****************************
searchdata=replace(keywords, " ' ", "?? ")
searchdata=Rtrim(LTrim(searchdata))
sql1= " "  
sql2= " "  
sql3= " "  
searchdatatmp=split(searchdata, "   ")  
max=ubound(searchdatatmp)  
if   max=0   then  
sql1=sql1& "   B.name   like   '% "   &   searchdatatmp(i)   &   "% '   "
sql2=sql2& " '; '   +   C.text1   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '   "
sql3=sql3& " '; '   +   C.text2   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '   "
else  
for   i=0   to   max  
if   i=0   then  
sql1=sql1& "   (B.name   like   '% "   &   searchdatatmp(i)   &   "% '   and   "
sql2=sql2& "   ( '; '   +   C.text1   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '     and   "
sql3=sql3& "   ( '; '   +   C.text2   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '     and   "
else
if   i=max   then  
sql1=sql1& "   B.name   like   '% "   &   searchdatatmp(i)   &   "% ')   "
sql2=sql2& "   '; '   +   C.text1   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% ')   "


sql3=sql3& "   '; '   +   C.text2   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% ')   "
else
sql1=sql1& "   B.name   like   '% "   &   searchdatatmp(i)   &   "% '   and   "
sql2=sql2& "   '; '   +   C.text1   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '   and   "
sql3=sql3& "   '; '   +   C.text2   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '   and   "
end   if
end   if
next  
end   if
****************模糊搜索字符串结束****************************


以下是可以顺利执行的语句,但是速度超慢,不过如果不引用模糊搜索速度还可以。
对了,我发现引用模糊搜索时,sql2=sql2& " '; '   +   C.text1   Like   '% '   +   ' "&   searchdatatmp(i)   & " '   +   '% '   "
要超长,我有个构思就是改成这样:
sql2=sql2& "   c.text1   like   '% "   &   searchdatatmp(i)   &   "% '   "  
这样一定可以快很多,但是这样子,我们前面的SQL语句又要更改了。
所以,还请大虾们再度帮忙一下。

sql= "select   distinct   b.*  
from   product   as   b,original   as   c   where  
  (   '; '+b.arr1     like   '%; '+ltrim(str(c.id))+ ';% '   or       '; '+b.arr2     like   '%; '+ltrim(str(c.id))+ ';% ')    
and   "   & "( "&   sql1& "   or   "&sql2& "   or   "&sql3   & ") "




[解决办法]
ACCESS的最好在ACCESS版塊問wangtiecheng,他在ACCESS方面很熟悉。
[解决办法]
To:ls
你这样的语句,要是数据多的话
是不会很快的..
模糊搜索本来速度就慢
[解决办法]
(select englishname from productsort where id=b.productsort)as vname

热点排行