mysql 如何删除SQL表中的行同时从同一个表中选择

ztmd8pv5  于 2022-12-17  发布在  Mysql
关注(0)|答案(1)|浏览(114)

我正在尝试删除表中的所有行,除了具有最大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
    )

这会引发错误
不能在FROM子句中指定要更新的目标表'node_revision__body'
是否有可能以某种方式更改查询以达到目标?

5lhxktic

5lhxktic1#

这是MySql的一个documented“特性”,您不能更新您从中选择的同一个表,但是存在一些变通方法,例如,您可以尝试将查询嵌套得更深一层:

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

相关问题