【发布时间】:2015-09-19 05:51:44
【问题描述】:
通常我想从我的数据库中的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 表中的所有行,我绝对不希望这样做。
我正在寻求帮助,以修改第一个或第二个解决方案以进行适当的工作。
【问题讨论】:
标签: mysql sql select sql-update mysql-error-1093