Select SUM(f1) 
from ( Select Distinct f1,f2,f3 from t1 ) T Select SUM(f1) 
from ( Select Distinct f1,f2,f3 from t1 )  上面第一个语句是正确的查询,下面的会报错,请问为什么必须加上表别名 T?骗过编译程序?

解决方案 »

  1.   

    from 后面的查询是作为一个表来用的,所以要给表起一个名字
      

  2.   

    在企业管理器里执行这个Select SUM(f1) 
    from ( Select Distinct f1,f2,f3 from t1 ) 它会自动改成这个
    Select SUM(f1) 
    from ( Select Distinct f1,f2,f3 from t1 ) DERIVEDTBL如果说手动加个T是为了骗过编译程序的话,原来程序也会自欺欺人啊...
      

  3.   

    sql无法为子查询指定一个表名,但却要做为一个表来使用,所以要人为地加一个别名.
    如果是Select SUM(f1) = (select max(f1) from t1)
    from t1
    像这种就不用
      

  4.   

    知道了,谢谢!
    FROM 子句可以指定:1、一个或多个表或视图。
    2、两个表或视图之间的联接。
    3、一个或多个派生表,这些派生表是 FROM 子句中的 SELECT 语句,以别名或用户指定的名称来引用这些派生表。FROM 子句中 SELECT 语句的结果集构成了外层 SELECT 语句所用的表。