这样的sql该怎么写
table1: Id, EnglishString, GermanString
table2: Id, EnglishString
目的:从table1中找出所有与table2的EnglishString匹配的string,连同相应的GermanString.
问题:直接用table1.EnglishString=table2.EnglishString速度较快,但是无法识别大小写。
若用StrComp()可以识别大小写,但是速度很慢。
想法:先用table1.EnglishString=table2.EnglishString检索出大小写不敏感的所有项目,然后
再用StrComp()进一步判断。以提高效率。
这种情况下,sql如何写好呢?
问题点数:40、回复次数:15Top
1 楼wwwwb()回复于 2006-06-01 09:59:56 得分 20
将表及要求结果贴出来看看Top
2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-01 10:00:46 得分 20
将“table1.EnglishString=table2.EnglishString检索出大小写不敏感的所有项目”作为子查询,然后在此基础上作查询:再用StrComp()进一步判断Top
3 楼wwwwb()回复于 2006-06-01 10:06:41 得分 0
TRY:
SELECT * FROM (
SELECT * FROM TABLE1,TABLE2 WHERE table1.EnglishString=table2.EnglishString) WHERE STRCOMP(table1.EnglishString,table2.EnglishString,0)=0;
Top
4 楼benh(滴答)回复于 2006-06-01 10:12:26 得分 0
SELECT talbe1.ID, table1.English, table1.German
FROM table1
WHERE table1.English IN //这里怎么加上StrComp(table1.English, 子查询结果,0) =0
(SELECT table1.English
FROM table1, table2
WHERE table1.English=table2.English);
就是在子查询和上层查询中都需要做一下判断,且只在自查询有结果时候,才进行下一步查询。Top
5 楼benh(滴答)回复于 2006-06-01 10:14:25 得分 0
wwwwb(),你的例子里面,是 (SELECT * FROM TABLE1,TABLE2 WHERE table1.EnglishString=table2.EnglishString) 先执行是吗?Top
6 楼wwwwb()回复于 2006-06-01 10:23:46 得分 0
是 (SELECT * FROM TABLE1,TABLE2 WHERE table1.EnglishString=table2.EnglishString) 先执行是吗?
YES
简化一点:
SELECT * FROM TABLE1,TABLE2 WHERE table1.EnglishString=table2.EnglishString and STRCOMP(table1.EnglishString,table2.EnglishString,0)=0;
Top
7 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-01 10:35:11 得分 0
--先在子查询(select * from table1 inner join table2 on table1.englishstring=table2.englishstring) as T1 中限定并检索出大小写不敏感的所有项目。
然后在子查询的基础上比较englishstring的大小写。
select *
from (select * from table1 inner join table2 on table1.englishstring=table2.englishstring) as T1
where strcomp(table1.englishstring,table2.englishstring,0)=0Top
8 楼benh(滴答)回复于 2006-06-01 11:21:24 得分 0
谢谢两位。遇到了新问题。
在query的sql view下编辑StrComp()得不到正常的结果:
单独用的StrComp(),不用table1.englishstring=table2.englishstring的情况下,不能得到任何结果。但是如果只用table1.englishstring=table2.englishstring,是可以得到不区分大小写的结果的。直接用StrComp(),就不行。奇怪的是,在另外一个query中,直接用StrComp(),也可以正常工作。
关于StrComp为什么没能正常工作,请问有什么建议吗?
或者,sql执行时候,能调试一下吗?Top
9 楼wwwwb()回复于 2006-06-01 11:26:59 得分 0
上传MDB到WWW.ACCESS911.NET/CSDNTop
10 楼benh(滴答)回复于 2006-06-01 11:42:00 得分 0
已经上传db1.mdb到WWW.ACCESS911.NET/CSDN,请帮忙看看。Top
11 楼wwwwb()回复于 2006-06-01 14:27:44 得分 0
是哪二个表?try:
SELECT *
FROM test_source,test1
WHERE test_source.Fruit=test1.English And StrComp([test_source].Fruit,[test1].[English],0)=0;
Top
12 楼benh(滴答)回复于 2006-06-01 15:09:11 得分 0
wwwb(),是另一个query,Query8_strcomp里面的语句,在用且只用strComp时候,完全不能检索出符合条件的内容。而在Query8_query_test,也就是你列举的这个query里,用StrComp是可以完成任务的。Top
13 楼wwwwb()回复于 2006-06-01 15:30:55 得分 0
可以
try:
SELECT GermanSource.English, ProjectStrings.English, GermanSource.German
FROM GermanSource, ProjectStrings
WHERE GermanSource.English=ProjectStrings.English
and StrComp(trim(GermanSource.English),trim(ProjectStrings.English),0)=0;Top
14 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-01 15:35:57 得分 0
原来是空格的问题!Top
15 楼benh(滴答)回复于 2006-06-01 16:01:13 得分 0
果然如此,多谢两位。Top




