有没有办法从 table 中 SELECT TOP N 行然后删除它们?

Is there a way to SELECT the TOP N rows from a table and delete them afterwards?

我想在 Teradata 中实现以下目标。

鉴于table,我愿意

第二个查询甚至不起作用(子查询中不允许使用 TOP)。

是否有实现此行为的直接方法?理想情况下即使是匆忙,但我也可以使用锁。

我也查看了 Queue tables,但它们只允许 TOP 1,所以显然设计为一次只弹出一个元素。

您可以使用临时 table。示例:

CREATE MULTISET VOLATILE TABLE tmp_top_100_idx AS
(SELECT TOP 100 * FROM table ORDER BY idx)
WITH DATA
ON COMMIT PRESERVE ROWS

DELETE FROM table 
WHERE idx IN (SELECT idx FROM tmp_top_100_idx)

Top N option is not supported in subquery

只是不允许在 子查询 中使用,但您可以将其包装在 Derived Table:

DELETE FROM table 
WHERE idx IN 
 ( SELECT *
   FROM
    ( SELECT TOP 100 idx FROM table ORDER BY idx
    ) AS dt
 )

子查询可能 相关,但不是派生的 Table :-)

但是,为什么你真的需要这个? 希望不要陷入循环以获得更小的交易。