如何修改 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】:

为了让它更快,去掉INs ...

(甲骨文)...

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 个结果,然后执行外部查询?的主要内容,如果未能解决你的问题,请参考以下文章

sql中,以list的元素为参数,遍历查询

sql语句将查询结果作为新表插入

修改 Postgres 查询以使用 generate_series 对几个连续范围间隔中的每一个进行总体求和

SQL如何显示查询结果的前100条?

SQL如何显示查询结果的前100条?

SQL如何显示查询结果的前100条?