sql - WITH 子句如何知道要使用哪个表?
问题描述
我在一本书中遇到了以下 SQL 语句:
WITH dcount AS
(
SELECT deptno, COUNT(*) AS dcount
FROM employees
GROUP BY deptno
)
SELECT
e.lname EMP_lastname,
e.deptno e_dept,
d1.dcount edept_count,
m.lname manager_name,
m.deptno mdept,
d2.dcount mdept_count
FROM
employees e,
dcount d1,
employees m,
dcount d2
WHERE
e.deptno = d1.deptno
AND e.mgr = m.empno
AND m.deptno = d2.deptno
AND e.mgr = 7839
该语句的目的是显示员工姓名、他们工作的部门、该部门的同事人数、经理的姓名以及经理所在部门的人数。
让我困惑的部分是 d1.count 和 d2.count。如果计数基于相同的 WITH 语句,它如何计算不同的事物?
解决方案
主查询连接相同的CTE,但每次都使用不同的连接谓词:
- 它正在
d1
使用e.deptno = d1.deptno
. - 它正在
d2
使用m.deptno = d2.deptno
.
因此,每个结果行都从 CTE 中选择不同的行。
推荐阅读
- javascript - 什么是 jquery-3-3-1 中已弃用的 .live() 语句的正确替代品
- python - 如何动态访问python类属性?
- r - 从数据框 1 聚合列并插入到数据框 2
- android - Android 构建错误“AndroidManifest.xml 需要占位符替换”
- php - 如何解决 Rest API 中的这个数组错误
- linux - 在 Linux 或 Mac 上运行 asp.net core 控制台应用程序
- asp.net - 如何在 Postman 中使用 ASP.NET 表单身份验证
- json - React http 与内部 json 文件请求和 axios 相对于 fetch 方法的优势
- ios - 如何在 Swift 中的文本字段下打开子视图?
- javascript - 在选择所需的复选框后使容器视图成为可能