ホームページ >データベース >mysql チュートリアル >MySQLデータベースの選択と同時に更新操作を実行する方法
MySQL では、SELECT FROM が UPDATE に使用されるテーブルを指すことを許可していないため、混乱を招くことがあります。もちろん、無限の一時テーブルを作成するよりも良い方法があります。この記事では、クエリ句で SELECT を使用しながらテーブルを UPDATE する方法について説明します。
問題の説明
UPDATE したいテーブルがクエリ句と同じテーブルであると仮定します。これには、テーブルの更新など、さまざまな理由があります。統計データ フィールドを使用したり (現時点では、統計値を返すために group 句を使用する必要があります)、非標準のステートメントを使用せずにレコードのフィールドから別のレコードを更新するなどです。例:
create table apples(variety char(10)primary key,price int);
insert into applesvalues('fuji', 5), ('gala', 6);
update apples
setprice = ( select Price from apples wherevariant = 'gala')
wherevariety = 'Fuji';
エラー メッセージは次のとおりです: ERROR 1093 (HY000): MySQL ManualUPDATE ドキュメントの更新にターゲット テーブル 'apples' を指定できません。 「現在、サブクエリでテーブルを更新したり、同じテーブルから選択したりすることはできません。」 この例では、問題を解決するのは非常に簡単ですが、クエリ句を使用してターゲットを更新する必要がある場合があります。幸いなことに、解決策があります。
解決策
MySQL は一時テーブルを介して FROM 句にネストされたクエリを実装するため、ネストされたクエリを別のネストされたクエリにロードすると、FROM 句のクエリが作成され、一時テーブルに保存されたクエリは、それを囲んでいるクエリで間接的に参照されます。次のステートメントは正しいです:
UPDATEリンゴ
価格を設定します=(
。データベース更新操作方法のコンテンツを選択するときに。 )!