别名的使用注意,""真坑。

Posted guoDaXia的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了别名的使用注意,""真坑。相关的知识,希望对你有一定的参考价值。

我们使用别名都是使用as关键字。

大多数时候我们都会省略as关键字,然后后面直接加别名就好了。我的习惯是别名用双引号括起来。

今天因为这个习惯坑了我一大波

 

首先oracle的别名的规则:

  AS 别名

  特殊字或者保留字啥的使用引号括起来别名

别名是在查询语句内,语句的执行顺序:

       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语句

使用别名的时候可能由于执行顺序导致找不到列

 

还有,在子查询中最好不要用引号别名。会导致你的外面where无法使用你子查询得到伪表中的列,这个我也不清楚原因。

证据:

select * from 
(select 
            id, 
            create_date,  
            SUBSTR(channel,0,NVL(INSTR(channel, \'|\', 1,1),0)-1) "sms_tag_id",
            SUBSTR(channel,NVL(INSTR(channel, \'|\', 1,1),0)+1, length(channel)- NVL(INSTR(channel, \'|\', 1,1),0)) "store_id",
            channel 
            from user_login 
            where 
            NVL(INSTR(channel, \'|\', 1,1),0) != 0) u 
where u.store_id = \'platf.anzhi\'
执行报错:U.store_Id: invalid identifier

 当我去掉了双引号它就好了。我擦。

 

参考链接:http://www.cnblogs.com/godtrue/p/3791591.html

 

以上是关于别名的使用注意,""真坑。的主要内容,如果未能解决你的问题,请参考以下文章

在 Elixir 中,为啥在导入模块时“别名”优于“导入”?

Python - 有没有办法在 for 循环中添加“as”别名?

sql where后面不能使用别名吗

ES 索引设置别名

linux 使用别名

MyBatis别名