我正在try 从一个表中删除所有行,除了同时从同一个表中 Select 数据的最大值为revision_id的行:

delete from
  node_revision__body
where
  entity_id=4 
  and revision_id not in (
    select
      max(revision_id)
    from
      node_revision__body
    where
      entity_id=4
    )

这就抛出了错误

不能在中指定要更新的目标表‘NODE_REVISION__BODY’ FROM子句

有没有可能以某种方式更改查询以实现该目标?

推荐答案

这是MySQL的一个documented"功能",您不能更新从中 Select 的同一个表,但有几个解决办法,例如,您可以try 将查询嵌套到更深一层:

delete from node_revision__body
where entity_id = 4 
  and revision_id not in (
    select revision_id from (
      select max(revision_id) revision_id
      from node_revision__body
      where entity_id = 4
    )b
);

看一个working demo

Mysql相关问答推荐

对具有依赖子查询结果的2列使用等式比较来优化连接

如何使用GROUP BY调优简单SQL查询

在时间戳上搜索大的MySQL表很慢

在 mySQL 中计算每日数组的每周指标

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

无法从mysql数据库获取数据

如何在 Shopware 6 DAL 中实施 Haversine 公式?

检索按键列值分组的最新日期 (MySql)

mysql insert into select join - 通过连接表将值从一列复制到另一表

Django中的MYSQL查询等效

Select 在同一天售出不同活动门票的收银员

MySQL按连续值和计数分组

SQL UPDATE中的str_replace?

MySQL 添加一个 NOT NULL 列

终止空闲的mysql连接

MySQL时区更改?

MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别?

MySQL 实用程序 - ~/.my.cnf 选项文件

PHP MYSQL - 插入不使用列名但使用自动增量字段