【问题标题】:MySQL delete common rows but limit rowsMySQL删除常用行但限制行
【发布时间】:2016-12-28 21:11:00
【问题描述】:

我想限制循环期间要删除的行数。 下面是表格。请注意,这是示例,两个表都有 20 多列和数百万行:

Table A1: 
ID  Name
1   Tony 
2   Andy
3   Nate 

A2
ID  Name
1   Tony 
2   Andy 

我想一次只删除 1 行,并将使用循环重新运行相同的 sql。我试过了:

delete from a1 where id  in (select id from a1 inner join a2 on a1.id = a2.id limit 1); 

说:

您不能在 FROM 子句中指定目标表 'a1' 进行更新。

有没有办法在mysql中做到这一点?

【问题讨论】:

  • 为什么要循环?有什么具体原因吗?
  • 顺便说一句,我想你在这里已经够久了,知道 Stack 是如何滚动的。这么多问题,没有一个被接受。您对给出的解决方案的互动也有待商榷。
  • 有关如何解决“无法指定更新目标表”问题的链接问题。使用该解决方案并将LIMIT 添加到其中。
  • 我不认为链接的副本真的是副本。我很确定正确的解决方案是将子查询转换为相关子查询,该答案未涵盖。
  • @Fred-ii- 知道了。感谢您让我知道我忽略的事情。

标签: mysql subquery correlated-subquery


【解决方案1】:

我不知道你为什么要使用循环。但是我怀疑你想要一个相关的子查询:

delete from a1
    where a1.id in (select a2.id from a2 where a1.id = a2.id limit 1); 

注意:使用limit 而不使用order by 看起来非常危险。这将为每个 a1.id 删除 任意 行。

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多