我已经执行了这个查询,我想把它放在PHP脚本的while循环中。因此,我需要将要删除的行限制为50 000.任何人都可以向我解释我是如何做到这一点的吗?
我的查询是:
DELETE a
FROM activities a INNER JOIN backup_activities b
ON a.id = b.id
LIMIT 50000 ??????????
谢谢!
答案 0 :(得分:2)
试试这个:
DELETE a
FROM activities AS a
JOIN
( SELECT b.id
FROM backup_activities b
ORDER BY b.id
LIMIT 50000
) AS tmp
ON tmp.id = a.id
答案 1 :(得分:2)
您可能需要进行相关删除。但是,基本上像AZIZ一样只能部分工作,因为它可能不包含活动中的ID,或者返回已经删除的ID。您需要确保获得仍然可用的ID。
这应该有所帮助,显然可以将5更改为您想要的任何限制计数。正如您所看到的,子查询只获取活动和backup_activities表中的ID。
DELETE a1
FROM activities a1
JOIN ( select a.id
from activities a
JOIN backup_activities b
where a.id = b.id
limit 5 ) killThese
on a1.id = killThese.id
反馈,考虑。
虽然其他解决方案正在运行,但我们不知道您的数据是如何在相应的表中填充的,请考虑以下方案......
表活动包含ID 1-100的记录 表Backup_Activities的记录为1-100。 现在,请考虑查询限制为20条记录。
从backup_activities返回的20条记录的连接仅为ID 1-20。因此,首先通过删除活动表中的ID为1-20的记录。
现在,第二遍。试图删除20条记录。 backup_activities表仍然返回相同的20个记录1-20个ID,因此NOTHING将被删除。
现在,再考虑一下我的解决方案。由于我的查询已加入活动,因此第一次传递将返回ID 1-20并从活动表ID 1-20中删除。现在,SECOND传递了我的查询...由于ID的JOIN,它返回ID 21-40并再次从活动表中删除。
同样,不知道你的表是如何处理的,而只是考虑你的查询将会做什么。
答案 2 :(得分:2)
这个怎么样?
DELETE a
FROM activities a
WHERE EXISTS (
SELECT 1
FROM backup_activities b
WHERE a.id = b.id
)
LIMIT 50000
顺便说一句
“我不认为删除限制有效..它不会执行”
MySQL在DELETE上支持LIMIT
。请参阅http://dev.mysql.com/doc/refman/5.5/en/delete.html