You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL删除同表非最大revision_id行报错,如何修改查询?

解决MySQL删除目标表数据时的子查询报错问题

原SQL语句报错的原因是MySQL不允许在DELETE/UPDATE操作的WHERE子句中直接引用要修改的目标表作为子查询的数据源。可以通过以下两种方式修改语句实现需求:

方法一:嵌套子查询为派生表

将获取最大revision_id的子查询包装成一个临时派生表,避免直接引用目标表:

DELETE FROM node_revision__body
WHERE entity_id = 4
  AND revision_id NOT IN (
    SELECT max_rev FROM (
      SELECT MAX(revision_id) AS max_rev
      FROM node_revision__body
      WHERE entity_id = 4
    ) AS temp_table
  )

方法二:使用JOIN关联临时表

通过JOIN方式关联包含最大revision_id的临时表,定位需要删除的行,这种方式在数据量较大时效率更优:

DELETE nrb
FROM node_revision__body nrb
JOIN (
  SELECT MAX(revision_id) AS max_rev
  FROM node_revision__body
  WHERE entity_id = 4
) AS temp 
ON nrb.entity_id = 4 
AND nrb.revision_id != temp.max_rev

内容的提问来源于stack exchange,提问作者stckvrw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:40:28