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

代码如下:

问题是: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句后的嵌套子查询必须取个临时表名,否则报错
                     )

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值