update gz_jbqk set (c27,c40,c41,c42,c43)=(select n7,n3,n4,n5,n6 from (select n1,n7,n3,n4,n5,n6 from gz_kq,gz_jbqk where gz_jbqk.c1=gz_kq.n1 and to_char(gz_jbqk.d4,''yyyy-mm'')=gz_kq.n8 union select gz_jbqk.c1 as n1,0 as n7,0 as n3,0 as n4,0 as n5,0 as n6  from  gz_jbqk where gz_jbqk.c1 not in (select n1 from gz_kq where to_char(gz_jbqk.d4,''yyyy-mm'')=gz_kq.n8)) b where b.n1=gz_jbqk.c1)
为什么更新不上?
表1:
 c1      c27  c40  c41  c42  c43    d4
400002                             2005-01-01
400003                             2005-01-01
表2:
n1      n2  n3   n4   n5  n6  n7     n8
400002      1    2    3   4   0.48    2005-01
想要的结果是:
 c1      c27  c40  c41  c42  c43    d4
400002   0.48  1    2   3     4    2005-01-01
400003    0    0    0   0     0    2005-01-01
以前这个语句我用过,可以的,但现在的结果是:
 c1      c27  c40  c41  c42  c43    d4
400002                             2005-01-01
400003    0    0    0   0     0    2005-01-01谢谢各位了

解决方案 »

  1.   

    利用中间的语句创建临时表yytt.得到:
    n1         n7   n3   n4   n5  n6
    400002  0.48    1    2    3   4       
    400003    0     0    0    0   0
    而: 
    update gz_jbqk set (c27,c40,c41,c42,c43)=(select n7,n3,n4,n5,n6 from yytt where yytt.n1=gz_jbqk.c1);
    能更新,但结果是:
     c1      c27  c40  c41  c42  c43   
    400002                             
    400003    0    0    0   0     0    难道这句有错吗?
      

  2.   

    自己搞定,gz_jbqk.c1和gz_kq.n1都是字符串,但长度不一样.我用的是oracle数据库
      

  3.   

    自己搞定,两个表中连接字段的长度不一致,我用的是oracle数据库.
    大家来领分,下午上班给分,我在电力局上班.