खैर, यह इस बारे में नहीं है कि आप इसे कर सकते हैं या नहीं। यह इस बारे में है कि आपको इसे करने की आवश्यकता है या नहीं। आपकी क्वेरी में मुझे कोई फ़िल्टर मानदंड नहीं दिख रहा है। आप सभी पंक्तियों को अपडेट करना चाहते हैं? मुझे CTE . की आवश्यकता नहीं दिख रही है आपके मामले में।
आपको CTE . की आवश्यकता कब पड़ती है , यानी a उप-क्वेरी फैक्टरिंग विधि के रूप में क्लॉज के साथ जब भी आपके पास ऐसा परिदृश्य होता है जहां उप-क्वेरी को कई बार निष्पादित किया जाता है। आप यह सुनिश्चित करने के लिए WITH क्लॉज का उपयोग करते हैं कि सबक्वेरी एक बार निष्पादित की जाती है, और परिणाम को एक अस्थायी तालिका के रूप में संग्रहीत किया जाता है।
हां, आप साथ . का उपयोग कर सकते हैं अद्यतन . के लिए खंड बयान।
उदाहरण के लिए,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
आप एक MERGE . का उपयोग कर सकते हैं कथन उपयोग करना साथ खंड।
उदाहरण के लिए,
SQL> MERGE INTO emp e USING
2 (WITH average AS
3 (SELECT deptno, AVG(sal) avg_sal FROM emp group by deptno)
4 SELECT * FROM average
5 ) u
6 ON (e.deptno = u.deptno)
7 WHEN MATCHED THEN
8 UPDATE SET e.sal =
9 CASE
10 WHEN e.sal <= u.avg_sal
11 THEN e.sal * 1.05
12 ELSE e.sal * 1.03
13 END
14 /
14 rows merged.
SQL>