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

誰かがMERGEステートメントがOracleで実際に何をするのか説明できますか?

    どのような結合が実行されますか?完全な外部結合だと思いますか?

    いいえ、通常の外部結合です。クエリは、ターゲットテーブルにソーステーブルにもある行がある場合と、ソーステーブルにターゲットテーブルにないレコードがある場合を知る必要があります。クエリは、ターゲットテーブルにはあるがソーステーブルにはない行に応答する必要がないため、双方向に移動するために外部結合は必要ありません。

    ただし、not matchedがない場合、外部結合は実行されません。 句(これは完全に有効です)。オプティマイザは、その場合、内部結合で十分であることを認識できるほど賢いです。

    WHEN MATCHED部分に関して:tの行がsの複数の行と一致するとどうなりますか?

    複数の一致がある場合、一致ごとに更新が実行されます。これは、最後に来る更新がコミットに書き込まれることを意味します。順序を指定する方法がないため、この場合、更新のソースは事実上ランダムです(一致のセットから)。

    @ Vincent Malgratが指摘したように、これは正しくありませんでした。複数の一致がある場合、Oracleは「ORA-40926:ソーステーブルに安定した行のセットを取得できません」というエラーを生成するようです。

    一致しない部分に関しては、「sの行にtの対応がない場合」を意味すると思います。私は正しいですか?

    正解です。




    1. ユーザーが受け取ったすべての助成金を一覧表示するにはどうすればよいですか?

    2. SQLServerのテーブル値関数を介してデータを削除する

    3. SQL Serverが2つの整数を除算した結果を四捨五入するのはなぜですか?

    4. java.sql.SQLException:jdbc:microsoft:sqlserverに適したドライバーが見つかりません