mysql 语句,select 1+2+3+4 as abc from table1 where abc>0

时间:2023-01-30 21:37:48
select 1+2+3+4 as abc from table1 where abc>0
这样的语句在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投影的别名...

#4


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

#5




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


建议你用你实际的情况举例,否则很难帮你想办法。

#6


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

#7


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

#8




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


方法一: 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




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


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

然后可以 select * from v_tbl where abc >0;

#10


视图是动态执行的吧?

#11


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

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

然后可以 select * from v_tbl where abc >0;


mssql有计算列的概念..

CREATE TABLE tb(a int,b int,c int,d AS a+b+c)

#12




小梁说得对,MS SQL SERVER中应该可以  mysql 语句,select 1+2+3+4 as abc from table1 where abc>0

#13


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

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

然后可以 select * from v_tbl where abc >0;


mssql有计算列的概念..

SQL codeCREATETABLEtb(aint,bint,cin…


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

#14




MySQL 中计算列不行。

#15


这样就可以了:
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投影的别名...

#4


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

#5




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


建议你用你实际的情况举例,否则很难帮你想办法。

#6


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

#7


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

#8




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


方法一: 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




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


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

然后可以 select * from v_tbl where abc >0;

#10


视图是动态执行的吧?

#11


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

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

然后可以 select * from v_tbl where abc >0;


mssql有计算列的概念..

CREATE TABLE tb(a int,b int,c int,d AS a+b+c)

#12




小梁说得对,MS SQL SERVER中应该可以  mysql 语句,select 1+2+3+4 as abc from table1 where abc>0

#13


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

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

然后可以 select * from v_tbl where abc >0;


mssql有计算列的概念..

SQL codeCREATETABLEtb(aint,bint,cin…


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

#14




MySQL 中计算列不行。

#15


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