sql >> データベース >  >> RDS >> Oracle

Oracle:更新句でCTEを使用

    まあ、それはあなたがそれをすることができるかどうかについてではありません。それはあなたがそれをする必要があるかどうかについてです。クエリにフィルター基準が表示されません。すべての行を更新しますか? CTEの必要性はないと思います あなたの場合。

    CTEが必要なのはいつですか つまり、サブクエリが複数回実行されるシナリオがある場合は常に、サブクエリの因数分解メソッドとしてwith句を使用します。 WITH句を使用して、サブクエリが1回実行され、結果セットが一時テーブルとして保存されるようにします。

    はい、 WITHを使用できます UPDATEの句 声明。

    たとえば、

    UPDATE TABLE t
    SET t.column1, t.column2 = (SELECT column1, column2 FROM 
                                           (
                                            WITH cte AS(
                                       SELECT ... FROM another_table
                                                     )
                                             SELECT * FROM cte
                                            )
    

    MERGEを使用できます ステートメント使用 WITH 条項。

    たとえば、

    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>
    


    1. Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver

    2. 機密データをSilverstripe3.1に保存する

    3. 同じログインユーザーが異なるセッションIDを割り当てました(異なるブラウザーで)

    4. SQLServerデータベースレプリケーション