2014-02-17 60 views
1

我正在構建更新查詢。如何使用「With」語句更短地在Oracle中進行更新查詢?

但由於無用的重複「With」語句而顯得相當混亂。

你有什麼想法可以縮短它嗎?

示例查詢如下。

UPDATE TABLE1 
    SET C1 = (
       WITH W_VIEW AS 
       (
       SELECT * 
        FROM TABLE1 
      ) 
       SELECT C_VALUE 
       FROM W_VIEW 
       WHERE ROWNUM = 1 

      ) 

WHERE C2 IN (

       WITH W_VIEW AS 
       (
       SELECT * 
        FROM TABLE1 
      ) 
       SELECT C2_VALUES 
       FROM W_VIEW 
       WHERE STH < 10 

      ); 

我只想使用W_VIEW一次。

例如,

WITH W_VIEW AS 
(
    SELECT * 
     FROM TABLE1 
) 
UPDATE TABLE1 
    SET C1 = (SELECT C_VALUE FROM W_VIEW WHERE ROWNUM = 1) 
WHERE C2 IN (SELECT C2_VALUES FROM W_VIEW WHERE STH < 10) 

。 我會很高興,如果該查詢工作:)

回答

0

也許這一個:

WITH w_view 
    AS (SELECT * 
     FROM table1) 
UPDATE (SELECT * 
     FROM table1 
     WHERE c2 IN (SELECT c2_values 
         FROM w_view 
         WHERE sth < 10)) 
SET c1 = (SELECT c_value 
      FROM w_view 
      WHERE rownum = 1) 
+0

謝謝!但是缺少選擇關鍵字錯誤,ORA-00928,發生。 ; - < – JeongjinKim