プログラム開発の情報や、雑記を投稿しているサイトです。

自己テーブルを参照するサブクエリー条件での更新エラー解決方法

sql-tips

更新、削除対象の条件に、自己テーブルを参照するサブクエリーを利用するクエリーを実行するとエラーが発生します。

この場合の解決策は色々とありますが、今回はコーディングのみで手っ取り早く解決できる方法を記載しています。

サブクエリーにエイリアスを利用する方法

エラーが発生する更新、削除クエリー

下記のような更新、削除対象の条件に、自己テーブルを参照するサブクエリーを条件とするクエリーを実行するとエラーが発生します。

※セキュリティーの関係上、予約後は全角文字に変換しています。

エラーメッセージ

エラーを回避する更新、削除クエリー

このエラーの原因は、サブクエリのFROM句と、更新対象のテーブルに、同じテーブルが使えないこととなります。
これを解決するには、上記のSQLを少しだけ修正します。
具体的には、サブクエリーのSELECT結果を、エイリアス指定するようにします。

※セキュリティーの関係上、予約後は全角文字に変換しています。

一時テーブルを利用する方法

更新対象となる自己参照テーブルの更新キーを、一時テーブルに格納する方法もあります。

一時テーブルとなるため、一連のトランザクションが終わると、自動的に消えます。

そのため、いつの間にか不要テーブルが増えていたということも防止出来ます。

まとめ

データベースのレコードを更新する場合に、自己テーブルを参照するサブクエリーを利用して、削除、更新する局面は、意外と多いものです。

解決法はたくさんありますが、このような条件を利用したデータ更新をする場合には、緊急性の高い作業が多いと思います。

ぜひ、作業効率をよくするために参考にして下さい。