SQL语句Where中使用别名作为判断条件

您所在的位置:网站首页 济宁的两个别名 SQL语句Where中使用别名作为判断条件

SQL语句Where中使用别名作为判断条件

2024-06-06 02:32| 来源: 网络整理| 查看: 265

转自:http://www.cnblogs.com/dwfbenben/archive/2013/09/07/3307941.html

当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件.    例如下面的SQL语句: select id, (c1 + c2) as s from t1  where s > 100    SQL Server 报错:  "列名 s 无效"       当然,写成      select id, (c1 + c2) as s from t1  where (c1 + c2) > 100   就没问题了.    可是当表达式复杂时就很繁琐了.       有没有可以在Where中使用这样的列名的办法?    或者有什么其他办法可以解决这类问题呢?  解决方法: SQL code 复制代码 select t2.* from (select id, (c1 + c2) as c from t1) t2 where c > 100 --或者 select t2.* from (select id, c = c1+c2 from t1) t2 where c > 100

                       由于在Where语句不能直接使用列别名,因此我们需要将Sql语句给包装一下                        在ORACLE中,在WHERE子句中引用列别名会出错,这是为什么呢?                        因为:SELECT 语句的执行顺序                        1. from语句                        2. where语句(结合条件)                        3. start with语句                        4. connect by语句                        5. where语句                        6. group by语句                        7. having语句                        8. model语句                        9. select语句                        10. union、minus、intersect等集合演算演算                        11. order by语句

sqlserver查询的执行顺序是: (1)FROM JOIN ON (2)WHERE (3)GROUP BY (4)HAVING (5)SELECT DISTINCT TOP() (6)ORDER BY 所以在where执行的时候,别名还不存在,而order by的时候已经存在

因为sql是在where后order by前加别名,即生成结果集后加别名,where是在生成结果集前的操作,order by是生成结果集后的操作,因为where要生成结果集,而order by是对结果集的操作。如果非要用别名,那么只能用派生表,即先生成别名再where select * from ( select 字段1 as A,字段2 as B.... from tablename ) aaa where A=1 order by A


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3