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

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

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

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

4个回答

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

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

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

qq_31182227
qq_31182227 只是前几位匹配呢 你这样等于不行
4 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问