1

私は次の表を持っています

#key | #value
colour | red
weather | blue

ここで、キーの色の行の値を、キーの天気の行の値に更新したいと考えています。だから私はやっている:

UPDATE table_name 
SET value = (SELECT value FROM table_name WHERE key = "weather") 
WHERE key = "colour";

しかし、この更新により、次のエラーメッセージが表示されます。

FROM 句で更新対象のテーブルを指定することはできません

エラーなしでそのクエリを実行するにはどうすればよいですか?

4

4 に答える 4

1

selectこれは、クエリが列に対して複数の値を返す場合があるためです。value

UPDATE table_name 
SET value = (SELECT max(value) FROM table_name WHERE key = "weather")
WHERE key = "colour";

また

UPDATE table_name 
SET value = (SELECT value FROM table_name WHERE key = "weather" limit 1) 
WHERE key = "colour";

サブクエリ内の のインスタンスを に置き換えることで、このように変更することができtable_nameます(SELECT * FROM table_name):

UPDATE table_name 
SET table_name.A =
(
    SELECT B
    FROM (SELECT * FROM table_name) AS something
    INNER JOIN ...
)

また、MySQL で更新ターゲットから選択する方法も確認してください。

実際には、サブクエリで SELECT * FROM table だけを使用したくはありません。例をシンプルにしたかっただけです。実際には、最も内側のクエリで必要な列のみを選択し、適切な WHERE 句を追加して結果を制限する必要もあります。

編集:-

あなたがすでにコメントしているように、私は上記のように一時テーブルを使用するように答えました:-

UPDATE table_name 
SET value = (SELECT value FROM (SELECT value FROM table_name WHERE key="weather") AS x) 
WHERE key="colour"
于 2013-11-10T11:02:21.217 に答える
-1
UPDATE table_name
SET colour ='red',weather =blue
WHERE column_name = some_value;
于 2013-11-10T11:02:11.733 に答える