select 1+2+3+4 as abc from table1 where abc>0
这样的语句在mssql里不会出错,在mysql里怎么就不行呢?
现在我就要通过这个自定义的列进行筛选数据.
请哪位告诉我一下这样的语句,在mysql里该怎么写.另外再请教一下,mysql能不能自定义一个列,这个列是由其他几列的动态计算结果.

解决方案 »

  1.   

    select 1+2+3+4 as abc from table1 where 1+2+3+4>0;MySQL不支持这种别名在where子句中引用。
    
      

  2.   

    一般内部的执行顺序是这样的..
    先执行 FROM  ,如果有多个表的话,会先产生迪卡尔积..
    如果有 ON    ,那在迪卡尔积中进行ON的匹配..
    再执行 WHERE ,进行行的筛选..
    再是   SELECT,进行投影..所以很清楚了..是先进行WHERE的..所以在WHERE时,,看不到SELECT投影的别名...
      

  3.   

    那在where 后面有没有办法先as一个,然后在前面再引用呢?
    我不想在where计算一次,在select后面又计算一次,共计算两次,那样会浪费很多时间.
      

  4.   

    实际的情况是
    select a+b+c as abc where abc>0
    a,b,c都是列名称,运算可能是加减乘除,再加一些if等函数组合而成.
    实际计算情况稍复杂一些,但是看到这句,我想大家应该知道我的实际用途应该是什么了.
      

  5.   

    另外再请教一下,mysql能不能自定义一个列,这个列是由其他几列的动态计算结果.
    如果这个问题有办法解决了,上面的问题就应该不是问题了.
      

  6.   


    方法一: select a+b+c as abc from tbl where a+b+c>0
    方法二: select * from (select a+b+c as abc from tbl) t where abc>0
      

  7.   


    任何一个数据库中估计都没办法在表中实现这么个列。一般是通过视图来实现。
    create view v_tbl as select a+b+c as abc from tbl; 然后可以 select * from v_tbl where abc >0;
      

  8.   


    mssql有计算列的概念..CREATE TABLE tb(a int,b int,c int,d AS a+b+c)
      

  9.   

    小梁说得对,MS SQL SERVER中应该可以 
      

  10.   


    我的表已经建好了,现在是用sqlyong操作mysql数据库的,不知道这样的计算列,能不能后来添加.怎么添加
      

  11.   

    这样就可以了:
    select a+b+c as abc from table1 where a+b+c>0;