2016-12-28 44 views
-1

我想限制在循环中要删除的行数。 以下是表格。请注意,这是样品和两个表具有超过20列,数百万行:MySQL删除公共行但限制行

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

说:

你不能指定目标表 'A1' 在FROM子句更新。

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

+0

为什么循环?任何具体原因? – GurV

+2

顺便说一句,我想你已经在这里足够长的时间知道堆栈如何滚动。这么多问题,都没有接受。您给出的解决方案的交互也是值得怀疑的。 –

+0

查看关于如何解决“无法指定更新目标表”问题的链接问题。使用该解决方案并为其添加“LIMIT”。 – Barmar

回答

0

我不知道为什么你会使用循环。不过,我怀疑你想有一个相关子查询:

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

注:若没有order by使用的limit看起来真的很危险。这将删除每个a1.id任意行。