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

21 浏览
0 Comments

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

这个问题已经有了答案

MySQL错误1093-无法在FROM子句中为更新指定目标表

如何解决MySQL错误“您不能在FROM子句中为更新指定目标表X”?[重复]

Mysql删除子查询[重复]

在UPDATE查询的WHERE子句中选择查询[重复]

mySQL:如何在WHERE IN子句中删除[重复]

我正在尝试同时从相同的表中选择数据并删除所有行,除了具有最大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子句中更新

是否可能以某种方式更改查询以达到目标?

admin 更改状态以发布 2023年5月23日
0
0 Comments

这是MySQL的一个“特性”,即不能在选择的表中进行更新,但是有一些解决方法,例如可以尝试嵌套查询一级深度:

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
);

请参见演示

0