作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在表格中有一些初始行。我想用递归调用修改它们。在我的示例代码中,这个函数是简单的乘以 2,我想执行它 5 次:
WITH RECURSIVE cte (n,v) AS
(
-- initial values
SELECT 0,2
UNION ALL
SELECT 0,3
UNION ALL
-- generator
SELECT n + 1, v * 2 FROM cte WHERE n < 5
)
SELECT v FROM cte where n = 5;
它有效,但我的问题是它只在查询结束时过滤掉不需要的值。如果我从更多的行开始,它会降低性能,因为我应该在内存中有更多的行。是否可以在每次迭代中只保留最新值?
SQLFiddle:http://sqlfiddle.com/#!5/9eecb7/6761
最佳答案
在 SQLite 中你可以使用 OFFSET clause
- The OFFSET clause, if it is present and has a positive value N, prevents the first N rows from being added to the recursive table. The first N rows are still processed by the recursive-select — they just are not added to the recursive table. Rows are not counted toward fulfilling the LIMIT until all OFFSET rows have been skipped.
演示:http://sqlfiddle.com/#!5/9eecb7/6804
WITH RECURSIVE cte (n,v) AS
(
-- initial values
SELECT 0,2
UNION ALL
SELECT 0,3
UNION ALL
-- generator
SELECT n + 1, v * 2 FROM cte WHERE n < 5 LIMIT 1000 OFFSET 10
)
SELECT * FROM cte
| n | v |
|---|----|
| 5 | 64 |
| 5 | 96 |
在上面的示例中,偏移量计算为初始选择中的初始行数(2 行)乘以迭代次数 (5) => 2*5=10
顺便说一句,在这个具体示例中,更好的解决方案是计算简单的 X * 2^5
(X 乘以 2 到 5 的幂)而不是递归。
关于mysql - 如何有效地只在 WITH RECURSIVE 语句中保留最新的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50077369/
我是一名优秀的程序员,十分优秀!