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

解决方案 »

  1.   

    update还是导出?
    select a.nid,b.strname,a.lat,a.lon
    from a,b
    where a.lat=b.lat and a.lon=b.lon;
      

  2.   

    在sql_plus里执行:
    set echo off
    set feedback off
    set heading off
    set linesize 你想要的长度
    set pagesize 一页的行数
    spool c:\reslut.txt
    SELECT A.NID||','||B.STRNAME||','||A.LAT||','||A.LON 
    FROM A,B 
    WHERE (A.LAT = B.LAT) AND (A.LON = B.LON);
    spool offrelut.txt 文件就是你要的内容,是不是这个意思
      

  3.   

    是update 。上面那个
    update table_a a set a.strname=(select b.strname from table_b b where a.lat=b.lat and a.lon=b.lon);
    不好用啊。出错:  单行子查询反回多于一个行
      

  4.   

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

  5.   

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

    update table_a a
    set a.strname=(select b.strname from table_b b where a.lat=b.lat and a.lon=b.lon)
    where a.lat=b.lat and a.lon=b.lon;
    好像应该效果一样的吧
      

  6.   

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

  7.   

    update a 
    set strname = (select distinct b.strname 
           from b 
           where a.lat = b.lat
           and a.lon = b.lon)
    where a.nid in (select distinct b.nid
                    from b
                    where b.lat = a.lat
                    and b.lon = a.lon);
      

  8.   

    update b set strname=(select max(strname) strname from a where a.lat=b.lat and a.lon=b.lon)
    where (b.lat,b.lon) in (select lat,lon from a);
      

  9.   

    你a表有主关键字,那么b表有没有和a表这个nid一一对应的字段啊
    如果有
    可以这样。
    update table_a a set a.strname=(select b.strname from table_b b where a.nid=b.nid);
      

  10.   

    to:  ATGC(这一生受了很多委屈吃了很多苦。。) ( )
    我的b表就是没有nid的。没有关连的。 请问怎么处理???
      

  11.   

    就是跟我上面说的一样的。表a字段 nid(自动id)   strname    lat    lon   
             1             前门     33.1     33.2     
    表b字段  strname                 lat       lon   
            游9(前门-蟒山):前门     33.1     33.2都是真实字段。
    请帮帮忙。我已经用java写了一个更新程序,但程序速度很慢,1个小时只能更新1000条记录。数据库记录巨大。
    还有没有办法?
      

  12.   

    我好橡知道问题所在了。通过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现在刚学。请多多指教。
      

  13.   

    rownum可以用吗? 它是什么意思? 怎么用的?distinct吗?
      

  14.   

    是诶~,所以俺说给俺多看些数据
    那就这样
    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);
      

  15.   

    b表中如果有这样的数据         strname                 lat       lon   
            游9(前门-蟒山):前门     33.1     33.2
            游8(蟒山-后门):后门     33.1     33.2 
    就不能用子查询方式更新
      

  16.   

    俺已经改了啊,上面就改了啊~~~
    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);
    试试
      

  17.   

    请仔细看看以下数据,b表的strname字段记录不是完全一样的。不能用distinct,还是出错的。         strname                 lat       lon   
            游9(前门-蟒山):前门     33.1     33.2
            游9(蟒山-前门):前门     33.1     33.2  怎么实现??
      

  18.   

    现在我已经把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);我也可以执行那条语句了。但执行是执行,就是数据记录没有效果,还是老样子?怎么回事。执行以上记录时没有出错信息。
      

  19.   

    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);
      

  20.   

    SQL> select * from aa;STRNAME                                         LAT        LON
    ---------------------------------------- ---------- ----------
    小钱门                                         33.1       33.2
    大钱们                                         10.1       10.2SQL> select * from bb;STRNAME                                         LAT        LON
    ---------------------------------------- ---------- ----------
    游9(前门-蟒山):前门                           33.1       33.2
    游9(蟒山-前门):前门                           33.1       33.2
    大小钱么                                       10.1       10.2
    小大钱么                                       10.1       10.2SQL> 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
      

  21.   

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

  22.   

    问题解决了。感激ATGC ,这么认真,细心。谢谢。。