oracle 导表问题,急!!!

jk3278jk 2004-10-25 05:20:57
表a字段 nid strname lat lon
1 前门 33.1 33.2


表b字段 strname lat lon
游9(前门-蟒山):前门 33.1 33.2


要求将表b里的字段strname中的值与表a替换成完全的字串 两表的关联可以使用lat(经度) 与lon (纬度)


希望表a结果

nid strname lat lon
1 游9(前门-蟒山):前门 33.1 33.2


因为数据量很大,用java写程序更新很慢,没办法只想求教oracle的导出方法了。谢谢


...全文
269 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
jk3278jk 2004-10-26
  • 打赏
  • 举报
回复
问题解决了。感激ATGC ,这么认真,细心。谢谢。。
bluelamb 2004-10-26
  • 打赏
  • 举报
回复
update table_a a set a.strname=(select b.strname from table_b b where a.lat=b.lat and a.lon=b.lon);
ATGC 2004-10-26
  • 打赏
  • 举报
回复
然后还要commit才能生效
ATGC 2004-10-26
  • 打赏
  • 举报
回复
SQL> select * from aa;

STRNAME LAT LON
---------------------------------------- ---------- ----------
小钱门 33.1 33.2
大钱们 10.1 10.2

SQL> select * from bb;

STRNAME LAT LON
---------------------------------------- ---------- ----------
游9(前门-蟒山):前门 33.1 33.2
游9(蟒山-前门):前门 33.1 33.2
大小钱么 10.1 10.2
小大钱么 10.1 10.2

SQL> update aa a set a.strname=(select max(b.strname) from bb b where a.lat=b.lat and a.lon=b.lon gr
oup by b.lat,b.lon);

2 rows updated.

SQL> select * from aa;

STRNAME LAT LON
---------------------------------------- ---------- ----------
游9(蟒山-前门):前门 33.1 33.2
小大钱么 10.1 10.2
ATGC 2004-10-26
  • 打赏
  • 举报
回复
update aa a set a.strname=(select max(b.strname) from bb b where a.lat=b.lat and a.lon=b.lon group by b.lat.b.lon);
jk3278jk 2004-10-26
  • 打赏
  • 举报
回复
现在我已经把B表的重复记录去掉了。已经不存在重复问题了。

update table_a a set a.strname=(select b.strname from table_b b where a.lat=b.lat and a.lon=b.lon);

我也可以执行那条语句了。

但执行是执行,就是数据记录没有效果,还是老样子?怎么回事。执行以上记录时没有出错信息。
jk3278jk 2004-10-26
  • 打赏
  • 举报
回复
请仔细看看以下数据,b表的strname字段记录不是完全一样的。不能用distinct,还是出错的。

strname lat lon
游9(前门-蟒山):前门 33.1 33.2
游9(蟒山-前门):前门 33.1 33.2

怎么实现??
jk3278jk 2004-10-25
  • 打赏
  • 举报
回复
谢谢。我去试试。明天告诉你结果。谢谢!
ATGC 2004-10-25
  • 打赏
  • 举报
回复
困了,祝楼主好运。。做个好梦。。。
ATGC 2004-10-25
  • 打赏
  • 举报
回复
俺已经改了啊,上面就改了啊~~~
update table_a a set a.strname=(select distinct b.strname from table_b b where a.lat=b.lat and a.lon=b.lon);
试试
z971179 2004-10-25
  • 打赏
  • 举报
回复
b表中如果有这样的数据

strname lat lon
游9(前门-蟒山):前门 33.1 33.2
游8(蟒山-后门):后门 33.1 33.2


就不能用子查询方式更新
z971179 2004-10-25
  • 打赏
  • 举报
回复
(经度+维度)的数据不唯一,本身逻辑就不清楚
ATGC 2004-10-25
  • 打赏
  • 举报
回复
是诶~,所以俺说给俺多看些数据
那就这样
update table_a a set a.strname=(select distinct b.strname from table_b b where a.lat=b.lat and a.lon=b.lon);
jk3278jk 2004-10-25
  • 打赏
  • 举报
回复
rownum可以用吗? 它是什么意思? 怎么用的?distinct吗?
jk3278jk 2004-10-25
  • 打赏
  • 举报
回复
我好橡知道问题所在了。通过lat(经度) 与lon(纬度) 查找数据,发现有多条记录。所以经度与纬度不能确定唯一性,当然出错了。


也就是说B表中有lat与lon重复的记录,但记录又不完全一样


A表示例:
nid(自动id) strname lat lon
1 前门 33.1 33.2


查找到B表重复记录如下:
strname lat lon
游9(前门-蟒山):前门 33.1 33.2
游9(蟒山-前门):前门 33.1 33.2


其实只要B表查出的任何一条记录,update进入a就行了。比面上面那两条重复记录,只要有一条更新入A表就行了。


用什么方法呢?熟悉mssql12000。 oracle现在刚学。请多多指教。


ATGC 2004-10-25
  • 打赏
  • 举报
回复
太少了,我希望多点
看看你的实际情况
最好要有建表脚本诶~
jk3278jk 2004-10-25
  • 打赏
  • 举报
回复
就是跟我上面说的一样的。

表a字段 nid(自动id) strname lat lon
1 前门 33.1 33.2


表b字段 strname lat lon
游9(前门-蟒山):前门 33.1 33.2

都是真实字段。
请帮帮忙。我已经用java写了一个更新程序,但程序速度很慢,1个小时只能更新1000条记录。数据库记录巨大。


还有没有办法?






ATGC 2004-10-25
  • 打赏
  • 举报
回复
你能不能提供建表脚本和一部分数据。。
jk3278jk 2004-10-25
  • 打赏
  • 举报
回复
to: ATGC(这一生受了很多委屈吃了很多苦。。) ( )


我的b表就是没有nid的。没有关连的。 请问怎么处理???

ATGC 2004-10-25
  • 打赏
  • 举报
回复
你a表有主关键字,那么b表有没有和a表这个nid一一对应的字段啊
如果有
可以这样。
update table_a a set a.strname=(select b.strname from table_b b where a.nid=b.nid);

加载更多回复(12)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧