日期:2014-05-19  浏览次数:20548 次

找出表中一个字段的前5位或6位等于另一个表的某个字段
规则:先比较表A中productcode的前5位是否与表B中的subcode相同,如果不同,再比较前6位是否与表B中的subcode相同,如果还是不同,则该记录对应的catecode,catename为空,如

表A:
orderno,lineno,productcode
1111           1                 667CG016
1111           2                 667CG010          
2222           1                 62AL5142
2222           2                 62AL5111
3333           1                 6343L031


表B:
catecode,catename,subcode
001                 aaa           667CG    
002                 bbb           62AL50
003                 ccc           62AL51

结果:
orderno,lineno,productcode,catecode,catename
1111           1                 667CG016         001             aaa
1111           2                 667CG010         001             aaa
2222           1                 62AL5142         003             ccc
2222           2                 62AL5111         003             ccc
3333           1                 6343L031         空                 空

因为可能的数据量比较大,所以在存储过程中能否不使用游标就能实现呢,谢谢


------解决方案--------------------
用2个substr做比较好了
------解决方案--------------------
orderno lineno productcode catecode catename
----------- ----------- ----------- -------- ----------
1111 1 667CG016 001 aaa
1111 2 667CG010 001 aaa
2222 1 62AL5142 002 bbb
2222 1 62AL5142 003 ccc
2222 2 62AL5111 002 bbb
2222 2 62AL5111 003 ccc
3333 1 6343L031 NULL NULL
------解决方案--------------------
肯定的 因为相当于分了好几次组 性质就跟你用的交叉联接一样
推荐
select * from a join b on substring(a.productcode,1,5)=b.subcode or substring (a.productcode,1,6)=b.subcode
便可