如何重复查询表数据,获取I条结果(I可大于表行数N)
实现循环重复查询表数据至指定条数
当然可以实现这个需求,核心思路是生成足够多的重复次数序列,和原表做笛卡尔积后,截取前I条数据即可。下面针对主流数据库给出具体实现:
MySQL(8.0+)
利用递归CTE生成重复次数序列,结合原表做交叉连接后取前I条:
WITH RECURSIVE nums AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM nums WHERE n < CEIL(5 / (SELECT COUNT(*) FROM T)) ) SELECT t.* FROM nums CROSS JOIN T ORDER BY nums.n, t.id -- t.id是表T的排序字段,确保重复顺序一致 LIMIT 5; -- 这里的5替换为你需要的I值
PostgreSQL
使用generate_series快速生成重复序列,语法更简洁:
SELECT t.* FROM generate_series(1, CEIL(5 / (SELECT COUNT(*) FROM T))::INT) AS s CROSS JOIN T ORDER BY s, t.id LIMIT 5;
SQL Server
同样用递归CTE生成序列,注意加上OPTION (MAXRECURSION 0)避免递归次数限制:
WITH nums AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM nums WHERE n < CEILING(5.0 / (SELECT COUNT(*) FROM T)) ) SELECT TOP 5 t.* FROM nums CROSS JOIN T ORDER BY nums.n, t.id OPTION (MAXRECURSION 0);
注意事项
- 必须指定一个固定的排序字段(比如主键
id),否则重复输出的顺序可能不稳定。 - 如果I小于表T的总行数N,上述代码会自动取前I条,无需额外修改。
内容的提问来源于stack exchange,提问作者Gorz
相关产品推荐
相关产品推荐

