让我把这两个表重新说一下,简单的。
TABLE1:  sop_activity_headers
COLUMN1: eh_id 数值型 8
COLUMN2: users_last_name 字符型 16
DATA:
eh_id    users_last_name
  1      BLANK
  1      BLANK
  2      张三
  3      李四
  3      李四
  4      王五
  5      BLANK
  6      BLANK
  6      BLANK
  6      BLANK
  7      赵六TABLE2:  rsm_activity_headers
COLUMN1: id 数值型 8
COLUMN2: patient_name 字符型 16
DATA:
 id    patient_name
  1      
  2      
  3      
  4      
  5      
  6      
  7      现在要做的,就是用Table1的数据来更新Table2的patient_name列。谢谢!

解决方案 »

  1.   

    按照你的数据
    update rsm_activity_headers t1
    set patient_name=(select distinct users_last_name from sop_activity_headers  t2 where t1.eh_id=t2.id)
      

  2.   

    我觉得这样更保险
    update rsm_activity_headers t1 
    set patient_name=
    (select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1)
      

  3.   

    SQL> update rsm_activity_headers t1 
      2  set patient_name=
      3  (select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1)
      4  /
    (select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1)
                                                               *
    ERROR 位于第3行:
    ORA-00904: "T1"."EH_ID": invalid identifier
      

  4.   

    SQL> update rsm_activity_headers t1 
      2  set patient_name=(select distinct users_last_name from sop_activity_headers  t2 where t1.eh_id=
    t2.id) 
      3  /
    set patient_name=(select distinct users_last_name from sop_activity_headers  t2 where t1.eh_id=t2.id
                                                                                          *
    ERROR 位于第2行:
    ORA-00904: "T1"."EH_ID": invalid identifier
      

  5.   

    我已经用如下代码把id,patient_name导到一张lsss表里了,insert into lsss (id,patient_name)
    select eh_id,users_last_name
    from rsm_activity_headers rah,sop_activity_headers aah
    where rah.id = aah.eh_id
    group by eh_id,users_last_name
    /这样子id,patient都唯一了。但我在用lsss表更新rsm_activity_headers表时,运行以下的语句,又出错了,快帮我看看吧。SQL> update rsm_activity_headers
      2  set patient_name = (
      3  select lsss.patient_name
      4  from lsss,rsm_activity_headers
      5  where lsss.id = rsm_activity_headers.id
      6  )
      7  /
    select lsss.patient_name
    *
    ERROR 位于第3行:
    ORA-01427: single-row subquery returns more than one row  怎么办啊?~~
      

  6.   

    单行返回多行记录了按照2楼说的做吧!
    SQL> update rsm_activity_headers
      2  set patient_name = (
      3  select lsss.patient_name
      4  from lsss,rsm_activity_headers
      5  where lsss.id = rsm_activity_headers.id and rownum=1--确定只出一行
      6  )
      7  / 
      

  7.   

    出现Oracle错误:ORA-00904是因为:列丢失或无效列名。 
    解决方案:输入有效的列名。一个有效的列名必须是以字母开头,小于30个字符,并且只包含字母、数字或一些特殊的符号$,_,#。如果还包含其它的字符,那么这段字符必须用双引号引起来。列名不能是关键字。 
    我觉得2楼的语句没有问题
    update rsm_activity_headers t1 
    set patient_name=(select distinct users_last_name from sop_activity_headers  t2 where t1.eh_id=t2.id) 
      

  8.   

    明白了。 可我上面的lsss表是前面GROUP BY id,users_last_name出来的,怎么会多行呢?困惑ing...
      

  9.   

    倒是更新了489行,但没有一个是有名字的哈。看似所有patient_name都被更新成了BLANK了
      

  10.   

    就是说,所有rsm_activity_headers的patient_name都按lsss的第一条记录更新成了BLANK了。
      

  11.   

    那就把BLANK都过滤了
    然后判断null的置为BLANKupdate rsm_activity_headers t1 
    set patient_name=
    nvl((select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1
     and users_last_name<>'BLANK'), 'BLANK')
      

  12.   

    SQL> update rsm_activity_headers t1  
      2  set patient_name= 
      3  nvl((select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1 
      4   and users_last_name <>'BLANK'), 'BLANK')
      5  /
    nvl((select users_last_name from sop_activity_headers t2 where t1.eh_id=t2.id and rownum=1
                                                                   *
    ERROR 位于第3行:
    ORA-00904: "T1"."EH_ID": invalid identifier
    SQL> 还是出错,楼上的,请帮着改改吧
      

  13.   

    update rsm_activity_headers t2
       set t2.patient_name = (select users_last_name
                                from (select t1.eh_id, t1.users_last_name
                                        from sop_activity_headers t1
                                       group by t1.eh_id, t1.users_last_name)
                               where eh_id = t2.id)
    where exists (select 1
              from (select t1.eh_id, t1.users_last_name
                      from sop_activity_headers t1
                     group by t1.eh_id, t1.users_last_name)
             where eh_id = t2.id);哈,已经在www.itpub.net上找到正解了,谢谢楼上的各位朋友,老师!