gpt4 book ai didi

MySQL 从同一个表中选择并更新多行

转载 作者:行者123 更新时间:2023-11-29 05:17:13 26 4
gpt4 key购买 nike

通常我想从数据库中的 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 - 您不能在 FROM 子句中指定要更新的目标表“order”

接下来,我尝试使用 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 中的所有行> table ,我坚决不想要。

我正在寻求有关修改第一个或第二个解决方案以确保正常工作的帮助。

最佳答案

它比你做的要简单得多。您可以将 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' );

关于MySQL 从同一个表中选择并更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com