sql - SQL - 递归 CTE 中 UNION 和 UNION ALL 之间差异的说明性示例?
问题描述
我在理解使用UNION
和UNION ALL
递归查询之间的区别时遇到了一些麻烦。在我在日常工作中遇到的示例中,通常没有明显的区别(例如,构建一个单调递增 1 的整数运行列表),但我一直在尝试更正式地使用Torsten Grust精彩的讲义以及 Postgres 和 MySQL 的文档。
例如:
with recursive
counter as (
select 0 as i
union all
select i + 1
from
counter
where
i < 10
)
select * from counter
返回与以下相同的结果:
with recursive
counter as (
select 0 as i
union
select i + 1
from
counter
where
i < 10
)
select * from counter
我感觉在进行分层遍历时存在差异,但我找不到一个很好的说明性示例来说明差异何时很重要。
问题 1:我知道UNION
删除重复的行,但我的问题是这些行是从哪里删除的?
- 我最好的猜测是,这就是
\
在 Torsten 的幻灯片中设置差异运算符所做的(参见下面的比较)。
对比
问题 2:是否有人能够提供一个很好的比较案例来显示什么时候 a UNION
vs.UNION ALL
会对递归查询产生重大影响?
解决方案
推荐阅读
- google-app-engine - Google App Engine 是否支持通过 python 进行多处理,数据库是否支持本地主机中的多次写入?
- r - Ubuntu 安装 MongoDB 4.0.0 时自动卸载 R 语言包
- python-2.7 - 如何在 Python 中通过 Selenium 截取多个屏幕截图?
- spring-mvc - WebServerException:无法启动嵌入式 Tomcat | Spring Boot 尤里卡服务器
- c++ - 如何使用 qt 向 3D 网格缩放?
- ios - GCDWebSever 是否支持网络套接字?
- google-bigquery - BigQuery 标准 sql 没有被删除?
- python - Apache Airflow - 即使关键任务失败,DAG 也会注册为成功
- php - 通过 cPanel 在 WordPress 上运行更改角色 Cron 作业
- python - 如何更改cherrypy请求主机头,使其不会在响应正文中返回