现在Oracle里有两个表,一个新表A,另一个旧表B;现在在新表A中需要新增一个属性,这个字段是B表中的ID号,A表和B表可以通过属性进行连接。
我的问题是怎么把B表的ID号对应的update过来呢?

解决方案 »

  1.   

    你说A表和B表通过ID字段来关联,而你又想要更新A表的ID字段,也就是A表的ID字段是空的.那么你怎么知道根据什么条件去更新A表的ID字段哪?
    请描述清楚
      

  2.   

    我根据你的意思理解为用下面的语句实现:insert into A (ID) select ID from B可以试一下
      

  3.   

    啊,我是想通过匹配的字段postalcode来把旧表web_site的ID更新到新表web_data_temp相对应的列当中:  update web_data_temp
       set  site_ID = ( select ID from web_site)
      where web_data_temp.postalcode in (select postalcode from web_site)但是这样写不对的,大家能明白我的意思吗?
      

  4.   

    update web_data_temp a
    set site_id = (select id from web_site b where a.postalcode = b.postalcode)
    where exists (select null from web_site b where a.postalcode = b.postalcode)前提必须保证POSTALCODE关联查出只能一个值
      

  5.   

    但是这个不止是一个值啊,因为在web_data_temp所有记录都对应一个web_site的id号,我是想批量update过来,如果使用update ...set ...只能是一个值的话,那么这个语句是没有办法的了。
      

  6.   

    用update tableA a
    set a.id=(select b.id from tableB b where a.keyid=b.keyid)orupdate(select a,id,b.id from tablea a,tableb b where a.keyid=b.keyid) set a.id=b.id
      

  7.   

    要分几步来做CREATE TABLE TMP_WEB_SITE AS
        SELECT id, postalcode FROM web_site GROUP BY id, postalcode
    /UPDATE web_data_temp a
           SET site_id = (SELECT id FROM TMP_WEB_SITE b WHERE a.postalcode = b.postalcode)
    /DROP TABLE TMP_WEB_SITE
    /
    注意上面的UPDATE中,如果根据postalcode找不到id的话,那么会把site_id置为NULL
      

  8.   

    首先谢谢各位,但是还是同样的问题就是类似
    UPDATE web_data_temp a
           SET site_id = (SELECT id FROM TMP_WEB_SITE b WHERE a.postalcode = b.postalcode)
      这样的情况,因为子查询肯定查出不止一个值,所以无法执行的,我反复试过这样的SQL语句了,有些大虾说可以通过循环来解决,但是我对Oracle又不熟悉,所以不知道怎么写比较妥当,麻烦各位告诉在下一声,感激不尽!
      

  9.   

    关键是第二步update的时候,仍然出现不能把子查询得到的多个值set到一个值中,还是没解决呢。
      

  10.   

    上面的语句要求表A和表B连接的字段在表A和表B中都是唯一无重复记录的.
    大家已经把语句写出来了,我想楼主应该仔细分析一下你这两个表的连接条件没写充分,造成不能一一对应.
    剩下的应该是分析两个表的结构了.