我一直在阅读Postgres中的With Query。这就是我很惊讶的地方
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
我不明白查询的评估是如何工作的。
关于SQL递归语句如何分解的任何见解。
这称为公用表表达式,是在SQL中表示递归查询的一种方式:
t(n)
将CTE的名称定义为t
,其中有一个名为的列n
。它类似于派生表的别名:
select ...
from (
...
) **_as t(n)_** ;
递归从值1开始(即values (1)
部分值),然后递归地将值加1,直到达到99。因此它将生成从1到99的数字。然后最终查询将所有这些数字相加。
n
是列名, 而不是 “变量”,并且“赋值”的发生方式与任何数据检索相同。
WITH RECURSIVE t(n) AS (
VALUES (1) -- **< < this is the recursion "root"**
UNION ALL
SELECT n+1 FROM t WHERE n < 100 -- **< < this is the "recursive part"**
)
SELECT sum(n) FROM t;
如果您“展开”递归(实际上是一个迭代),那么您将得到如下所示的结果:
select x.n + 1
from (
select x.n + 1
from (
select x.n + 1
from (
select x.n + 1
from (
values (1)
) as x(n)
) as x(n)
) as x(n)
) as x(n)
手册中的更多详细信息:https :
//www.postgresql.org/docs/current/static/queries-
with.html
查询是根据用户的请求用可读格式显示从数据库中提取的数据。Navicat 提供强大的查询工具:查询编辑器 - 可直接编辑查询文本,查询创建工具、查找创建工具或聚合创建工具 - 视觉化地创建查询。你可以保存查询,用于设置自动运行任务。在主窗口中,点击 “查询”来打开查询的对象列表。你亦可以在主工具栏点击 “新建查询”来创建一个新的查询而不必打开任何连接。 若要使用外部编辑器打开查询,请右击查询并选择“
查询是根据用户的请求用可读格式显示从数据库中提取的数据。Navicat 提供强大的查询工具:查询编辑器 - 可直接编辑查询文本,查询创建工具、查找创建工具或聚合创建工具 - 视觉化地创建查询。你可以保存查询,用于设置自动运行任务。在主窗口中,点击 “查询”来打开查询的对象列表。你亦可以在主工具栏点击 “新建查询”来创建一个新的查询而不必打开任何连接。 若要使用外部编辑器打开查询,请按住 Contr
查询是根据用户的请求用可读格式显示从数据库中提取的数据。Navicat 提供强大的查询工具:查询编辑器 - 可直接编辑查询文本,查询创建工具、查找创建工具或聚合创建工具 - 视觉化地创建查询。你可以保存查询,用于设置自动运行任务。在主窗口中,点击 “查询”来打开查询的对象列表。你亦可以在主工具栏点击 “新建查询”来创建一个新的查询而不必打开任何连接。 【提示】查询(.sql 或 .js)保存于设置
在实例详细信息页面中,点击费时查询图表。 “费时查询”页面使用历史数据来帮助你识别消耗资源的长时间运行的查询,并调查性能问题的根本原因。数据是每秒收集并随时间自动压缩。 所有受监控的实例都显示在左侧窗格中。选择一个实例以查看其费时查询图表。 Navicat Monitor 提供了有关查询的几项附加信息。点击选项卡以显示相应的图表。可用选项卡取决于已选择实例的服务器类型。 【提示】当查看 SQL S
我正在深入研究 java 并发 API,并试图了解读写锁的有用性。javadoc说读写块维护一对锁,一个用于读取,另一个用于写入操作。虽然写锁定是线程的独占访问,但多个线程可以获取读锁定。因此,如果在读取部分,我们所做的只是读取操作,并且无论如何我们都提供多个线程访问,那么首先需要读锁吗?是否存在读写锁实际上有用的情况?