派生表在外部查询的FROM子句中不存在?

时间:2019-05-02 04:53:18

标签: sql tsql language-lawyer

我正在读一本T-SQL书,上面写着

  

...派生表在外部查询的FROM子句中定义   而不是在外部查询之前。至于的FROM子句   关于外部查询,派生表尚不存在;   因此,如果您需要引用派生的多个实例   桌子,你不能。

这意味着我们可以通过交叉联接来做到这一点:

SELECT *
FROM (
    SELECT empid FROM Sales.Orders
) AS D, D

上面的查询产生无效的对象D错误。

听起来很公平,但是如果派生表还不存在,下面的查询如何有效:

SELECT *
FROM (
    SELECT empid FROM Sales.Orders
) AS D
WHERE D.empid = 12

我的意思是,如果D还不存在,如何通过D.empid访问该列?

1 个答案:

答案 0 :(得分:2)

SQL的评估顺序为*:

  1. FROM(表,派生表和联接表)
  2. 在哪里
  3. 选择

因此DFROM子句中不可用,但是 WHERE子句中可用。


*仅显示问题中使用的操作。完整列表为available here