update A a
set a.name=(select B.name from B where a.type=B.type);
不很明白你的A和B表的关联逻辑是什么。将A的type和B的type相同的name更改一下?但语法就是上面这样了

解决方案 »

  1.   

    substr(A.code,1,4)=B.type
    你的语句中 a.type=B.type ,但a.type是空值,最终不能更新
      

  2.   

    哦,这个逻辑啊,晕
    那就是:
    update A a
    set a.name=(select B.name from B where B.type=substr(a.code,1,4)),
        a.type=(select B.type from B where B.type=substr(a.code,1,4));
      

  3.   

    我也是这样写的,但出错了。
    (Error): ORA-01407: 无法更新 ("ZHENGGUAN"."A"."NAME") 为 NULL
      

  4.   

    update A a
    set a.name=(select max(B.name) from B where B.type=substr(a.code,1,4)),
        a.type=(select max(B.type) from B where B.type=substr(a.code,1,4));确保唯一对应,才可以更新。
      

  5.   

    那说明你B里的记录不唯一,而且可能有name为空的,你要先处理B的数据或者如楼上那样
      

  6.   

    update A a set
    (name,type)=(select name,type from B
    where B.type=substr(a.code,1,4));
      

  7.   

    各位大侠,你们定的SQL测试过吗?谢谢各位了
      

  8.   

    update A a set
    (name,type)=(select nvl(max(name),'null'),max(type) from B
    where B.type=substr(a.code,1,4));