2 qq 31182227 qq_31182227 于 2016.03.18 18:48 提问

求解决oracle两个表数据匹配的问题

是这样,有两个表 A 和B
图片说明

要求得出只要A_id的开头和B表中的A_num的数据匹配,就将B的value添加进去
结果应该是这样:
图片说明

其中A标的数据量有十万多,B表的有四千多。
这个需求应该怎样高效的实现?
想了很久都没得思路,求大神帮助啊!

4个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.03.18 21:03
已采纳
 select a.*,b.value from a,b where instr(a.a_id,a_num)=1
danielinbiti
danielinbiti 回复qq_31182227: 有长短优先的,建议用程序内存中处理,比数据库快
一年多之前 回复
qq_31182227
qq_31182227 回复danielinbiti: 还有一个问题,要是我有一个A_num是123 那不是和A_num为12的重叠了?查询出来A_id为1236985的就会输出两次了。这个怎么解决......... 目标是取123的为最终
一年多之前 回复
danielinbiti
danielinbiti 回复qq_31182227: 有时间采纳一下
一年多之前 回复
qq_31182227
qq_31182227 回复danielinbiti: 了解了 太感谢了
一年多之前 回复
danielinbiti
danielinbiti 回复qq_31182227: instr返回的是位置,只要加上等于1就是从头开始。
一年多之前 回复
danielinbiti
danielinbiti 回复qq_31182227: 后面补加了等于1了
一年多之前 回复
qq_31182227
qq_31182227 回复danielinbiti: instr是从头开始匹配的吗?就比如A_id有26985412,那他会不会匹配到A_num是12的 然后结果value是12了?
一年多之前 回复
danielinbiti
danielinbiti 回复qq_31182227: 上面语句执行应该就是你的结果,a_num从头开始匹配a_id。
一年多之前 回复
qq_31182227
qq_31182227 这样试了得不出结果,只是前若干位一样不是全部呢
一年多之前 回复
qq_31182227
qq_31182227   2016.03.18 18:55

排版乱了,应该这样
图片说明
结果
图片说明

chenli19343302
chenli19343302   2016.03.19 09:21

select a.*, b.value from A a join B b on (a.A_id=b.a_num)

qq_31182227
qq_31182227 只是前几位匹配呢 你这样等于不行
一年多之前 回复
qq_31182227
qq_31182227   2016.03.20 20:26

还有其他方案吗?????????????????????

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!