日期:2014-05-17  浏览次数:20890 次

多次update 合并成一个
表结构如下
SQL> select * from test_1;

        ID NAME
---------- ----
         1 a
         2
         3

SQL> select *from test_2;

        ID NAME desc
---------- ----  ----
         1 m     ok
         2 n     no
         3 o     not

SQL> 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千万数据 更新两次太浪费时间 请高手帮个忙
------最佳解决方案--------------------
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