ホームページ >データベース >mysql チュートリアル >MySQL の「FROM 句で更新対象のテーブルを指定できません」エラーを解決する方法?

MySQL の「FROM 句で更新対象のテーブルを指定できません」エラーを解決する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-22 20:01:08758ブラウズ

How to Solve MySQL's

MySQL の「FROM 句で更新のターゲット テーブルを指定できません」エラーのトラブルシューティング

問題:

テーブル (UPDATE など) をターゲットとする MySQL pers ステートメント中に「FROM 句で更新のターゲット テーブルを指定できません」というエラーが発生した場合は、MySQL のクエリ処理の制限を示しています。

シナリオ例:

次の UPDATE クエリがあるとします。

<code class="language-sql">UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL OR gehalt < ... ); </code>

このクエリは、同じ gehalt テーブルに関係する条件に基づいて pers テーブルの pers 列を更新しようとしているため、エラーが発生します。

これが起こる理由:

MySQL の制限により、FROM 句が意図しない変更を引き起こす可能性のあるあいまいな更新が防止されます。

解決策:

回避策には、サブクエリを使用してテーブルの一時エイリアスを作成することが含まれます。

<code class="language-sql">UPDATE pers P
SET P.gehalt = (SELECT T.gehalt * 1.05 FROM (SELECT * FROM pers) AS T WHERE T.persID = P.persID)
WHERE (P.chefID IS NOT NULL OR P.gehalt < ...);</code>

この改訂されたクエリでは、pers ステートメント自体内での UPDATE への直接参照が回避されます。 サブクエリ (SELECT * FROM pers) AS T は一時テーブル エイリアス T を作成し、UPDATE ステートメントが MySQL のルールに違反することなく必要なデータを参照できるようにします。

重要な注意:

SELECT * を使用すると例が簡略化されますが、最適なパフォーマンスを得るには、サブクエリ内の pers テーブルから必要な列のみを選択してください。 効率的にデータを取得できるように、サブクエリには常に関連する WHERE 句を含めてください。 上の例では、メインの WHERE T.persID = P.persID ステートメントとサブクエリの間で行を正しく一致させるために、UPDATE が重要です。

以上がMySQL の「FROM 句で更新対象のテーブルを指定できません」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。