[英]MySQL select and update multiple rows from same table
通常我想从我的数据库中的orders
表中选择行,这些行是在某个日期之后创建的,然后将所有选定行的office_id
字段更新为特定值12
。 我的MySQL版本是5.5.43。 在第一次,我试图把它放在一个SQL语句中,如下所示:
UPDATE `order`
SET office_id = 12
WHERE id IN (
SELECT id
FROM `order`
WHERE created_at >= DATE_FORMAT( '2014-07-02 00:00:00', '%Y.%m.%d 00:00:00' )
);
我收到错误: #1093 - You can't specify target table 'order' for update in FROM clause
。
接下来我尝试使用SELECT .. FOR UPDATE
语句这样做:
START TRANSACTION;
SELECT id
FROM `order`
WHERE created_at >= DATE_FORMAT( '2014-07-02 00:00:00', '%Y.%m.%d 00:00:00' )
FOR UPDATE;
UPDATE `order`
SET office_id = 12
WHERE id IN ( id );
COMMIT;
哪个工作,但如果SELECT .. FOR UPDATE
语句没有返回任何行,那么office_id = 12
将应用于orders
表中的所有行,这是我绝对不想要的。
我正在寻找帮助修改第一或第二个适合工作的解决方案。
它比你制作它简单得多。 您可以将WHERE子句直接应用于UPDATE语句。
UPDATE `order`
SET office_id = 12
WHERE created_at >= DATE_FORMAT( '2014-07-02 00:00:00', '%Y.%m.%d 00:00:00' );
如果id
可以按order
复制,那么您可以使用join
表达查询:
UPDATE `order` o JOIN
(SELECT distinct o.id
FROM `order` o
WHERE created_at >= DATE_FORMAT( '2014-07-02 00:00:00', '%Y.%m.%d 00:00:00'
) oo
ON o.id = oo.id
SET o.office_id = 12;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.