如何修改 SQL 查询以迭代每 100 个结果,然后执行外部查询?
Posted
技术标签:
【中文标题】如何修改 SQL 查询以迭代每 100 个结果,然后执行外部查询?【英文标题】:How do you modify an SQL query to iteratate over every 100 results and then perform an outter query? 【发布时间】:2013-05-22 13:31:13 【问题描述】:以下查询:
DELETE FROM attachmentdata
WHERE attachmentid IN
( SELECT attachmentid
FROM attachments
WHERE pageid IN
( SELECT contentid FROM content_delete )
);
如果内部嵌套的 SELECT 查询返回一个小列表(可能是几百个),则可以完美运行。
但现在我试图在将返回 10000 - 15000 行的东西上运行它,这需要很长时间。我运行了查询,45 分钟后没有任何反应。
是否可以修改查询,使内部 SELECT 返回的每 100 个结果都转到外部 DELETE 查询,然后转到下一个 100 个结果?
【问题讨论】:
一般情况下,您必须使用原始 SQL 之外的脚本语言来执行此操作。 @GordonLinoff - 如果解决方案使用 shell / bash 脚本就可以了。 @user1068636 。 . .在 Oracle 中,它将是 PL/SQL 脚本。 【参考方案1】:为了让它更快,去掉IN
s ...
(甲骨文)...
DELETE ad
FROM attachmentdata AS ad
INNER JOIN attachments AS att ON ad.attachmentid = att.attachmentid
INNER JOIN content_delete AS cd ON cd.contentid = att.pageid
(mysql) ...
DELETE ad.*
FROM attachmentdata AS ad
INNER JOIN attachments AS att ON ad.attachmentid = att.attachmentid
INNER JOIN content_delete AS cd ON cd.contentid = att.pageid
【讨论】:
以上是关于如何修改 SQL 查询以迭代每 100 个结果,然后执行外部查询?的主要内容,如果未能解决你的问题,请参考以下文章