2

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

就像是

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

也许我可以做一些类似 update Emp e1, Emp e2 set ... 的事情?

谢谢

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';

无论如何,您应该使用Gregology 的答案。这是面向未来的,您可以在要更新两个或更多字段时使用它。Gregology 在 sqlfiddle 中的答案演示: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

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

瑞安 A. (NZT)

于 2012-05-10T02:45:14.243 回答
-1

事实上,您发布的查询应该可以工作。此功能称为子查询。

于 2012-05-09T21:24:08.877 回答