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

MERGEテーブル、一致した場合は何もしません

    あなたの場合、パーツを使用する必要はありません:

    WHEN MATCHED THEN UPDATE ...

    WHEN MATCHED THEN UPDATE SET a.id = a.idを使用します は受け入れられますが(Oracleは投げつけません)、影響はありません。したがって、一致するケースについては何も変更したくないため、このような使用法は冗長です。

    現在のケースでは、次の手順に進みます:

    SQL> CREATE TABLE domains( 
                               id          INT, 
                               name        VARCHAR2(50), 
                               code        VARCHAR2(50), 
                               description VARCHAR2(50)
                             );
    
    SQL> INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');
    
    SQL> MERGE INTO domains A USING 
         (SELECT 2 id, 'Domain A' name, 'D.A.' code, 'This is Domain A' description 
            FROM domains) b
              ON ( a.name = b.name )
            WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                                  VALUES( b.id, b.name, b.code, b.description );
    
    SQL> SELECT * FROM domains;
    
    ID  NAME        CODE    DESCRIPTION
    --  --------   -----  ----------------
    1   Domain A    D.A.  This is Domain A
    
    SQL> DELETE domains;
    
    SQL> INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');
    -- we're deleting and inserting the same row again
    
    SQL> MERGE INTO domains A USING       
     (SELECT 2 id, 'Domain B' name, 'D.B.' code, 'This is Domain B' description 
        FROM domains) b
          ON ( a.name = b.name )
        WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                              VALUES( b.id, b.name, b.code, b.description );
    
    
    SQL> SELECT * FROM domains;
    
    ID  NAME        CODE    DESCRIPTION
    --  --------   -----  ----------------
    1   Domain A    D.A.  This is Domain A
    2   Domain B    D.B.  This is Domain B
    

    デモ



    1. O.oであってはならないときにSQLをIntに変換する

    2. SQLでの整数としての出力の選択/キャスト

    3. PHPアプリで保留中のAJAXリクエストをキャンセルしますか?

    4. 主キーを無視してSQLServerの重複行を削除する3つの方法