在回答有关 stackoverflow 的问题时,我提出了派生表的定义:
派生表是一个完整的查询,在括号内,就像一个真正的表一样使用。
但有评论者反对:
尽管除了“括号内”之外还有其他类型的派生表。... [例如] 视图和表值函数 ... .
并进一步支持这一点:
来自 ISO/IEC 2003 规范,框架卷的第 4.3 节,2003 年 8 月规范草案的第 13 页:“引用零个或多个基表并返回表的操作称为查询。查询的结果称为一个派生表。” 请注意,视图和表值函数都返回“查询结果”,这是一个派生表。Microsoft(以及在较小程度上,Oracle)因其在其文档中错误地将“派生表”和“子查询”等同而臭名昭著,但派生表确实也包括预定义的查询,如视图。
那么真正的独家新闻是什么?我是将我认为的派生表降级为简单的“FROM 子句别名内联子查询”还是视图没有正确派生表?
请注意:我在网上搜索了很长一段时间,但找不到任何明确的内容。我没有上述规范的副本。
此外,我认为值得解决其他问题。假设视图被正确地称为“派生表”。这是否使对视图的引用也是“派生表”或仅仅是引用?对于一个 CTE 的例子,应该把这个点带回家:
WITH SalesTotals AS (
SELECT
O.CustomerID,
SalesTotal = Sum(OrderTotal)
FROM
dbo.CustomerOrder O
GROUP BY
O.CustomerID
)
SELECT
C.Name,
S.SalesTotal
FROM
dbo.Customer C
INNER JOIN SalesTotals S
ON C.CustomerID = S.CustomerID;
Run Code Online (Sandbox Code Playgroud)
SalesTotals
引入的CTEWITH
是一个派生表。但INNER JOIN SalesTotals
也是派生表,还是只是对派生表的引用?这个查询有两个派生表还是一个?如果一个人,然后推而广之,我认为,一个观点可能是一个派生表,但参考它可能不具备成为一个派生表。
归档时间: |
|
查看次数: |
290 次 |
最近记录: |