探讨一个sql语句,有疑惑
我最近在做一份两表的比对时,想查出其中一个表的记录不在另外一个表的记录时,发现存在一个问题,就是我有同一个零部件:货号都是一样的,就是在表中的记录,其中一个后面没有空格,另外一个后面有一个全角空格。
我用了:
sele hh FROM S1 WHER Hh not IN (SELE HH FROM S2)
和
SELE HH FROM S1 LEFT JOIN S2 ON ALLTRIM(S1.HH)==ALLTRIM(S2.HH) WHER S2.HH IS NULL
及
SELE HH FROM S1 WHER HH !=ALL (SELE HH FROM S2)
这三条语句搜索出来是一样的效果,但是存在的那个有问题的零部件(货号相同)每次都会筛选出来。
不知道这这种零部件有问题的情况下如何才能准确的筛选出来我所需要查找的不同记录呢?请教各位专家了。
[解决办法]
去掉全角空格
或
SELE HH FROM S1 LEFT JOIN S2 ON ALLTRIM(STRTRAN(S1.HH,CHR(41377),chr(32)))==ALLTRIM(STRTRAN(S2.HH,CHR(41377),chr(32))) WHER S2.HH IS NULL
但性能下降了,所以先去掉全角空格再执行你的语句,并且以后存储时对全角空格做一下检查。
[解决办法]
先替换全角空
update tt set f1=STRTRAN(f1,CHR(41377),asc(''))