如果我有一个表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 ......?
谢谢
答案 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)
实际上,您发布的查询应该有效。此功能称为子查询。