【发布时间】:2020-02-20 07:50:14
【问题描述】:
大多数讨论 OUTER|CROSS APPLY 的在线文档或教程描述如下:
SELECT columns
FROM table OUTER|CROSS APPLY (SELECT … FROM …);
子查询通常是完整的SELECT … FROM … 查询。
我一定在某处读过子查询不需要FROM,在这种情况下,列似乎来自主查询:
SELECT columns
FROM table OUTER|CROSS APPLY (SELECT … );
因为我经常使用它作为预先计算列的方法。
问题是如果子查询中省略了FROM,会发生什么?它是其他东西的缩写吗?我发现它确实 not 与主表中的含义相同。
我这里有一个示例:http://sqlfiddle.com/#!18/0188f7/4/1
【问题讨论】:
-
您好,它会为您提供函数而不是内联查询吗?
-
引擎需要 from 子句才能知道数据的来源。如果您知道自己的值是什么,则省略 FROM 工作,例如 SELECT 1, SELECT 'no from Clause'。如果您有一个需要查询的表,则需要一个 from 子句
-
"The question is what really happens if the FROM is omitted from the sub query?"你不能自己运行一下看看发生了什么吗? -
没有
FROM的SELECT就像从一个虚构的单行表中选择一样。在APPLY的情况下,如果您引用主表中的列,那么它只会使用外部查询中当前行的值作为相关参数。 -
我注意到 1 票反对,1 票结束此问题。有人愿意解释一下,还是这只是一个肇事逃逸?
标签: sql sql-server cross-apply