2

テーブルEmpがあり、行2のアドレスIDを行1のアドレスIDと同じにしたい場合、ストアドプロシージャなしでそれを実行できますか?

何かのようなもの

UPDATE Emp SET address_id = (SELECT address_id FROM Emp WHERE id = 1) WHERE id = 2;

たぶん私はEmpe1、Emp e2セットを更新するようなことをすることができます...?

ありがとう

4

4 に答える 4

3

これはあなたの仲間のために働くはずです。

UPDATE Emp t, (SELECT address_id
    FROM Emp
    WHERE ID = 1) t1
SET t.address_id = t1.address_id
WHERE ID = 2
于 2012-05-09T21:57:34.950 に答える
1

更新は(他のデータベースで)機能しますが、テーブルがそれ自体を更新できないというMySQLの主張に対して、つまり、これを行うことはできません。

update tbl
  set address = (select address from tbl where name = 'paul')
where name = 'george';

ただし、回避策を実行できます:http ://www.sqlfiddle.com/#!2/5f373/6

update tbl
  set address = ( select address from 
                      (select address from tbl where name = 'paul') x )
where name = 'george';

とにかく、あなたはグレゴロジーの答えで行くべきです。これは将来を見据えたものであり、2つ以上のフィールドを更新する場合に使用できます。sqlfiddleでのGregologyの回答デモ:http ://www.sqlfiddle.com/#!2 / 5f373 / 10

于 2012-05-10T03:27:01.090 に答える
0

これを試してください。

UPDATE Emp SET address_id =(SELECT t.address_id FROM Emp t WHERE t.id = 1)WHERE id = 2

--テーブルのエイリアシングは、更新ステートメントのサブクエリを介してのみ実行できます。

Rhian A.(NZT)

于 2012-05-10T02:45:14.243 に答える
-1

実際、投稿したクエリは機能するはずです。この機能はサブクエリと呼ばれます。

于 2012-05-09T21:24:08.877 に答える