用另一行更新DB行(Mysql)

时间:2012-05-09 21:21:48

标签: mysql sql

如果我有一个表Emp并且我希望第2行的地址id与第1行的地址id相同,那么我可以在没有存储过程的情况下进行吗?

这样的东西
UPDATE Emp SET address_id = (SELECT address_id FROM Emp WHERE id = 1) WHERE id = 2;

也许我可以做一些更新Emp e1,Emp e2 set ......?

谢谢

4 个答案:

答案 0 :(得分:3)

这应该适合你。

UPDATE Emp t, (SELECT address_id
    FROM Emp
    WHERE ID = 1) t1
SET t.address_id = t1.address_id
WHERE ID = 2

答案 1 :(得分: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';

无论如何,你应该选择Gregology's answer。这是面向未来的,当您想要更新两个或更多字段时,可以使用它。 Gregology在sqlfiddle中的答案演示:http://www.sqlfiddle.com/#!2/5f373/10

答案 2 :(得分:0)

尝试这个。

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

- 表的别名只能通过更新语句的子查询来完成。

Rhian A.(NZT)

答案 3 :(得分:-1)

实际上,您发布的查询应该有效。此功能称为子查询。