SQL 的from中嵌套的子查询的临时表名的作用域问题

来源:互联网 发布:吴大猷 知乎 编辑:程序博客网 时间:2024/04/30 14:37

代码如下:

问题是:with句中的子查询返回的临时表名,可以应用于全局。但是,from句中的子查询,返回的临时表明,却在用于where句的子查询中的时候,sql server提示 临时表明无效?            问题总结为from 句中的子查询的临时表名的作用域范围为多少?

WITH    T2 ( department, avg_salary )                          --这样是可以正确执行的

  AS 

 ( SELECT  department,
                AVG(salary)
        FROM    teacher
        GROUP BY department
      )
    SELECT  department      --找出平均工资最高的系的系名
    FROM    T2
    WHERE T2.avg_salary=(SELECT MAX(avg_salary)
      FROM T2;                                                     )               


  

SELECT department                                                  --这样会提示T2识别不了
FROM (SELECT department,AVG(salary) AS avg_salary
   FROM teacher
   GROUP BY department
   ) AS T2(department,avg_salary)
WHERE avg_salary=(SELECT MAX(avg_salary)
         FROM T2       --这里的T2无效,为什么?    如果把上面from中的子查询放在with语句中,T2就有效
         )

 

 

SELECT  department       --这样可以,不使用from子句返回的临时表名T2
FROM    ( SELECT    department,
                    AVG(salary) AS avg_salary
          FROM      teacher
          GROUP BY  department
        ) AS T2 ( department, avg_salary )
WHERE   avg_salary = ( SELECT   MAX(salary)      
                       FROM     ( SELECT    AVG(salary) AS salary
                                  FROM      teacher
                                  GROUP BY  department
                                ) AS T1     --sql server中 from句后的嵌套子查询必须取个临时表名,否则报错
                     )

 

 

原创粉丝点击