通常,我想从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
表中的所有行,这是我绝对不想要的。
我正在寻求帮助修改第一个或第二个解决方案以进行适当的工作。