2017-12-19 13 views
0

私はこのようなテーブルを持っている:同じテーブル内の別のレコードと同じレコードを更新するにはどうすればよいですか?

// names 
+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | jack | 
| 2 | jack | 
+----+-------+ 

そして、ここでは私のクエリです:

// names 
+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | jack | 
| 2 |  | 
+----+-------+ 

そしてここでは、期待された結果である

update names set name = (select name from names where id = 1) where id = 2 

しかし、それはスロー:

ERROR 1093(HY000):あなたは、私はそれを行うことができますどのように

から更新のターゲット表の名前」を指定することはできませんか?

+0

あなたのデータでフィドルを作成してください –

+1

この場合、通常、このようにしてMySQLをトリックします。... ... set name =名前を選択します(名前はid = 1の名前から選択します)。 –

+0

それじゃない? 'self-join'を使うことができますか? @GiorgosBetsos – stack

答えて

0

あなたはサブクエリをネストしてMySQLをだますことができ、次のいずれか

update names 
set name = select name from (select name from names where id = 1) as t 
where id = 2 

か、あなたはCROSS JOINを使用することができます。

UPDATE names n 
CROSS JOIN (
    SELECT name FROM names WHERE id = 1) AS t 
SET 
    n.name = t.name 
WHERE id = 2 

Demo here

2

あなたが別名で同じテーブルに参加する必要があります。

UPDATE names as t1 
INNER join (select name from names where id = 1) t2 
SET t1.name = t2.name 
WHERE t1.id = 2 
+0

ところで、これは、他の1つに比べて早く投稿されたので、受け入れられた答えでなければならない –

+0

ジョーゴスの答えはより完全です。 –

+0

ありがとう.. upvote – stack

関連する問題