【发布时间】:2013-09-21 08:51:38
【问题描述】:
我正在学习 SQL,并且很难理解以下递归 SQL 语句。
WITH RECURSIVE t(n) AS (
SELECT 1
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
SELECT sum(n) FROM t; 中的 n 和 t 是什么?据我所知,n 是 t 的一个集合。我说的对吗?
还有这个语句中的递归是如何触发的?
【问题讨论】:
-
不是。 MySQL 不支持
with或递归。你在考虑什么数据库? -
MySQL 不支持
WITH RECURSIVE语法,因此我稍微扩大了问题范围以避免该问题。 (它被其他各种数据库支持。) -
t是一个表,n是该表的一列。它使用CTE (Common Table Expression) to create recursion。基本上,它从1(UNION中的第一个选择)开始,然后对于每次迭代,它选择最后一个结果 + 1,直到n等于 100(UNION的第二部分)。然后,最后一个SELECT(在 CTE 之外)对所有结果求和。不要被这个例子所迷惑,表被称为RECURSIVE,那里没有魔法。这只是名字。 -
@GordonLinoff 感谢您指出这个问题。它应该在 PostgreSQL,而不是 MySQL。我犯了一个错误。
-
@duskwuff 感谢您纠正我的帖子。