这样的语句在mssql里不会出错,在mysql里怎么就不行呢?
现在我就要通过这个自定义的列进行筛选数据.
请哪位告诉我一下这样的语句,在mysql里该怎么写.
另外再请教一下,mysql能不能自定义一个列,这个列是由其他几列的动态计算结果.
15 个解决方案
#1
mssql不会出错?..
#2
select 1+2+3+4 as abc from table1 where 1+2+3+4>0;
MySQL不支持这种别名在where子句中引用。
#3
一般内部的执行顺序是这样的..
先执行 FROM ,如果有多个表的话,会先产生迪卡尔积..
如果有 ON ,那在迪卡尔积中进行ON的匹配..
再执行 WHERE ,进行行的筛选..
再是 SELECT,进行投影..
所以很清楚了..是先进行WHERE的..所以在WHERE时,,看不到SELECT投影的别名...
先执行 FROM ,如果有多个表的话,会先产生迪卡尔积..
如果有 ON ,那在迪卡尔积中进行ON的匹配..
再执行 WHERE ,进行行的筛选..
再是 SELECT,进行投影..
所以很清楚了..是先进行WHERE的..所以在WHERE时,,看不到SELECT投影的别名...
#4
那在where 后面有没有办法先as一个,然后在前面再引用呢?
我不想在where计算一次,在select后面又计算一次,共计算两次,那样会浪费很多时间.
我不想在where计算一次,在select后面又计算一次,共计算两次,那样会浪费很多时间.
#5
建议你用你实际的情况举例,否则很难帮你想办法。
#6
实际的情况是
select a+b+c as abc where abc>0
a,b,c都是列名称,运算可能是加减乘除,再加一些if等函数组合而成.
实际计算情况稍复杂一些,但是看到这句,我想大家应该知道我的实际用途应该是什么了.
select a+b+c as abc where abc>0
a,b,c都是列名称,运算可能是加减乘除,再加一些if等函数组合而成.
实际计算情况稍复杂一些,但是看到这句,我想大家应该知道我的实际用途应该是什么了.
#7
另外再请教一下,mysql能不能自定义一个列,这个列是由其他几列的动态计算结果.
如果这个问题有办法解决了,上面的问题就应该不是问题了.
如果这个问题有办法解决了,上面的问题就应该不是问题了.
#8
方法一: 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
#9
任何一个数据库中估计都没办法在表中实现这么个列。一般是通过视图来实现。
create view v_tbl as select a+b+c as abc from tbl;
然后可以 select * from v_tbl where abc >0;
#10
视图是动态执行的吧?
#11
mssql有计算列的概念..
CREATE TABLE tb(a int,b int,c int,d AS a+b+c)
#12
小梁说得对,MS SQL SERVER中应该可以
#13
我的表已经建好了,现在是用sqlyong操作mysql数据库的,不知道这样的计算列,能不能后来添加.怎么添加
#14
MySQL 中计算列不行。
#15
这样就可以了:
select a+b+c as abc from table1 where a+b+c>0;
select a+b+c as abc from table1 where a+b+c>0;
#1
mssql不会出错?..
#2
select 1+2+3+4 as abc from table1 where 1+2+3+4>0;
MySQL不支持这种别名在where子句中引用。
#3
一般内部的执行顺序是这样的..
先执行 FROM ,如果有多个表的话,会先产生迪卡尔积..
如果有 ON ,那在迪卡尔积中进行ON的匹配..
再执行 WHERE ,进行行的筛选..
再是 SELECT,进行投影..
所以很清楚了..是先进行WHERE的..所以在WHERE时,,看不到SELECT投影的别名...
先执行 FROM ,如果有多个表的话,会先产生迪卡尔积..
如果有 ON ,那在迪卡尔积中进行ON的匹配..
再执行 WHERE ,进行行的筛选..
再是 SELECT,进行投影..
所以很清楚了..是先进行WHERE的..所以在WHERE时,,看不到SELECT投影的别名...
#4
那在where 后面有没有办法先as一个,然后在前面再引用呢?
我不想在where计算一次,在select后面又计算一次,共计算两次,那样会浪费很多时间.
我不想在where计算一次,在select后面又计算一次,共计算两次,那样会浪费很多时间.
#5
建议你用你实际的情况举例,否则很难帮你想办法。
#6
实际的情况是
select a+b+c as abc where abc>0
a,b,c都是列名称,运算可能是加减乘除,再加一些if等函数组合而成.
实际计算情况稍复杂一些,但是看到这句,我想大家应该知道我的实际用途应该是什么了.
select a+b+c as abc where abc>0
a,b,c都是列名称,运算可能是加减乘除,再加一些if等函数组合而成.
实际计算情况稍复杂一些,但是看到这句,我想大家应该知道我的实际用途应该是什么了.
#7
另外再请教一下,mysql能不能自定义一个列,这个列是由其他几列的动态计算结果.
如果这个问题有办法解决了,上面的问题就应该不是问题了.
如果这个问题有办法解决了,上面的问题就应该不是问题了.
#8
方法一: 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
#9
任何一个数据库中估计都没办法在表中实现这么个列。一般是通过视图来实现。
create view v_tbl as select a+b+c as abc from tbl;
然后可以 select * from v_tbl where abc >0;
#10
视图是动态执行的吧?
#11
mssql有计算列的概念..
CREATE TABLE tb(a int,b int,c int,d AS a+b+c)
#12
小梁说得对,MS SQL SERVER中应该可以
#13
我的表已经建好了,现在是用sqlyong操作mysql数据库的,不知道这样的计算列,能不能后来添加.怎么添加
#14
MySQL 中计算列不行。
#15
这样就可以了:
select a+b+c as abc from table1 where a+b+c>0;
select a+b+c as abc from table1 where a+b+c>0;