如果我有一个表 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 ... 的事情?
谢谢
这应该对你有用。
UPDATE Emp t, (SELECT address_id
FROM Emp
WHERE ID = 1) t1
SET t.address_id = t1.address_id
WHERE ID = 2
您的更新可以工作(在其他数据库上),但 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
试试这个。
UPDATE Emp SET address_id = (SELECT t.address_id FROM Emp t WHERE t.id = 1) WHERE id = 2
-- 表的别名只能通过更新语句的子查询来完成。
瑞安 A. (NZT)
事实上,您发布的查询应该可以工作。此功能称为子查询。