表结构如下
SQL> select * from test_1;        ID NAME
---------- ----
         1 a
         2
         3SQL> select *from test_2;        ID NAME desc
---------- ----  ----
         1 m     ok
         2 n     no
         3 o     notSQL> select * from testblock;        ID NAME
---------- ----
         1 mcc
         2 nvv
         3 ott现在的需求是 1.更新 test_1 把name所有为空的更新成 testblock表的内容 
              2.再更新test_1  把name取出第一个字母后与test_2的name匹配 如果匹配上了 就取desc列的值
test_1表中有1千万数据 更新两次太浪费时间 请高手帮个忙

解决方案 »

  1.   

    test_2+testblock关联结果decode,更新
      

  2.   

    WITH TABLE1 AS(       
    SELECT '1' AS ID, 'A' AS NAME FROM dual       
    union all           
    SELECT '2' AS ID, '' AS NAME FROM dual          
    union all           
    SELECT '3' AS ID, '' AS NAME FROM dual      
    union all           
    SELECT '4' AS ID, '' AS NAME FROM dual     
    ), 
    TABLE2 AS (           
    SELECT '1' AS ID, 'M' AS NAME,'ok' AS DC FROM dual   
    union all           
    SELECT '2' AS ID, 'N' AS NAME,'NO' AS DC FROM dual    
    union all        
    SELECT '3' AS ID, 'O' AS NAME,'NOT' AS DC FROM dual 
    union all        
    SELECT '4' AS ID, 'D' AS NAME,'NOT' AS DC FROM dual        
    ),
    TABLE3 AS (           
    SELECT '1' AS ID, 'MCC' AS NAME FROM dual       
    union all           
    SELECT '2' AS ID, 'NVV' AS NAME FROM dual          
    union all           
    SELECT '3' AS ID, 'OTT' AS NAME FROM dual
    union all           
    SELECT '4' AS ID, 'TTT' AS NAME FROM dual
    )SELECT DECODE(INSTR(NVL(T1.NAME, T3.NAME), T2.NAME),
                  1,
                  DC,
                  NVL(T1.NAME, T3.NAME)) AS NAME
      FROM TABLE1 T1
     INNER JOIN TABLE2 T2 ON T1.ID = T2.ID 
     INNER JOIN TABLE3 T3 ON T1.ID = T3.IDUPDATE TABLE1 SET NAME = (
    SELECT DECODE(INSTR(NVL(T1.NAME, T3.NAME), T2.NAME),
                  1,
                  DC,
                  NVL(T1.NAME, T3.NAME)) AS NAME
      FROM TABLE1 T1
     INNER JOIN TABLE2 T2 ON T1.ID = T2.ID 
     INNER JOIN TABLE3 T3 ON T1.ID = T3.ID)效率的话不知道咯。