如何更新记录与同一个表中的另一条记录相同? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有这样一张桌子:

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

这是预期的结果:

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

这是我的查询:

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

但它抛出:

错误1093(HY000):您不能在FROM子句中为更新指定目标表'名称'

我怎样才能做到这一点?

mysql sql
2个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.