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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Oracle两表数据相连和计算比率
union all 语法可以使得两个表拼接在一起。 语法为:表1 union all  表2 Oracle计算比率:to_char( (a.zhou / b.zhou2)*100,'999' ) || '%'
两张表进行字段模糊匹配关联
tableauexcel
Oracle中比对2张表之间数据是否一致的几种方法
转自:http://www.askmaclean.com/archives/oracle-compare-data-between-tables-method.html
Oracle中通过Job实现定时同步两个数据表之间的数据
摘要:之前项目中用的触发器来实现数据解析,但是最近客户反应,
匈牙利算法——最大匹配问题详解
2017年中兴提前批校招,就考了一题匈牙利算法。   匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。   先了解一些概念性的东西吧。   1.二分图   设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子
怎么对比出oracle两个数据库全表数据差异
如有两张相同表结构的表:test表:test1表:现在要找出两张表有差异的数据,需要用minus及union的方式查找出来,语句如下:123456789select t1.* from(select * from testminusselect * from test1) t1union select t2.* from(select * from test1minusselect * from
oracle 循环比对两张表数据差异
begin for l in(select nvl(b.areacode, a.areacode) areacode,a.areaname, case               when a.areaname = b.areaname and a.areacode = b.areacode then               '0'--不变              when
java实现字符串匹配问题之求两个字符串的最大公共子串
本文通过简单的事例阐述字符串对比的算法思想,并用java给予实现。该算法可以用于求两个字符串的子串、最大子串等。
oracle比较两张相同数据表的差异?
oracle比较两张相同数据表的差异?
找出两张表中不匹配的记录
前面说了找出两张表中匹配的记录,这里接着讲找出两张表中不匹配的记录。还是以前面的A表B表为例。从A表中找出B表没有的记录,与从B表中找出A表没有的记录,结果是不一样。我下面的记载,是使用SQL时不同的尝试,有些得出正确答案,有些没有,但可以分析一下为什么是这样一个答案。以找出"A表中B没有匹配项的记录"为例:1、是Access的"Find Unmatched Query Wizard"生成