表的数据如下:
RandomId    ID    NAME    PATH
0          1     名称1    
0          2     名称2
0          3     名称3
0          4     名称4
1          10             .0.1.6.10.
1          11             .0.1.6.11.
1          12             .0.2.6.12.
1          13             .0.2.6.13.
1          14             .0.3.6.14.
1          15             .0.3.6.15.
1          16             .0.3.6.16.
1          17             .0.4.6.17.
1          18             .0.4.6.18.
1          19             .0.4.6.19.
1          20             .0.1.6.20.说明:PATH字段中点与点之间的值为ID字段的值
请问如何用一个UPDATE语句将RandomId为0的记录的NAME字段的值更新到RandomId的值为1的记录的NAME中,条件是RandomId为1的记录的PATH值中存在RandomId为0的记录的ID的值???
也就是如何用一个UPDATE语句得到下面的结果:
RandomId    ID    NAME        PATH
0          1     名称1    
0          2     名称2
0          3     名称3
0          4     名称4
1          10     名称1        .0.1.6.10.
1          11     名称1        .0.1.6.11.
1          12     名称2        .0.2.6.12.
1          13     名称2        .0.2.6.13.
1          14     名称3        .0.3.6.14.
1          15     名称3       .0.3.6.15.
1          16     名称3        .0.3.6.16.
1          17     名称4        .0.4.6.17.
1          18     名称4        .0.4.6.18.
1          19     名称4        .0.4.6.19.
1          20     名称4        .0.1.6.20.

解决方案 »

  1.   

    简单点,
    update tablename set name='名称1' where to_number(substr(path,4,1))=1;
    update tablename set name='名称2' where to_number(substr(path,4,1))=2;
    update tablename set name='名称3' where to_number(substr(path,4,1))=3;
    update tablename set name='名称4' where to_number(substr(path,4,1))=4;
      

  2.   

    update tablename a set name=(selete name from (select * from tablename  where RandomId=1) b where to_number(substr(a.path,4,1))=b.id) where a.RandomId=1
      

  3.   

    不好意思,上面写错了update tablename a set name=(selete name from (select * from tablename  where RandomId=0) b where to_number(substr(a.path,4,1))=b.id) where a.RandomId=1