各位好!我需要把b表的数据更新到a表中 语句如下:
update cfg_bsc_map_city a set a.omcid=(select substr(b.omc_id,4,3)||'_'||b.city_id from
 ne_bsc_g b  where a.bscname=b.china_name)//a.bscname=b.china_name是唯一的
但是执行却报错,请问我这批量修改语句有问题吗?望指点呀!多谢啦!

解决方案 »

  1.   

    那说明两个表中a.bscname=b.china_name数据不是一对一的,你在检查下数据吧
      

  2.   

    如果对于每一条记录a.bscname和b.china_name只有一条互相匹配记录的话,你的语句是能通过的
      

  3.   

    理论上说如果只有一条记录是可以使用"="的!
    要批量修改可以先定义一个函数,如update(x)----  x 你要修改的字段名
    然后用个PL_SQL语句块中设置一定条件循环调用这个函数!
      

  4.   

    看看这个报错吗
    update cfg_bsc_map_city a set a.omcid=(select substr(b.omc_id,4,3)||'_'||b.city_id from 
    ne_bsc_g b  where a.bscname=b.china_name) 
    where exists (select 1 from ne_bsc_g where ne_bsc_g.china_name=a.bscname;
      

  5.   

    这回充分说明两个表中a.bscname=b.china_name数据不是一对一的,你在检查下数据吧或者改改where
      

  6.   


    SELECT B.CHINA_NAME, count(*) as cnt
    FROM NE_BSC_G B
    GROUP BY B.CHINA_NAME
    HAVING COUNT(*) > 1
    ;请执行上述语句,如果有查询到数据存在,则说明B表的资料不唯一。更新的逻辑需要重新考虑。谢谢!
      

  7.   

    嗯,如果都需要更新的话就用in或exist
      

  8.   

    你用用这个:
    update cfg_bsc_map_city a 
    set a.omcid=(select max(substr(b.omc_id,4,3)||'_'||b.city_id) from 
    ne_bsc_g b  where a.bscname=b.china_name)