环境plsql 9.0 ,oracle 10g。
先上今天遇到的代码:
select pwdGroup.* ,pwdGroup.pc
from
(select pwd.date_time,sum(pwd.product_count) as "pc" from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup
order by pwdGroup.date_time asc
已经将sql处理了下,主题无关的部分全部删去了。
这条sql意思就是从PWD_PRODUCT 这张表中,查询出分组数据,并按分组排序显示出来。
这代码是正确的么?
nonono,这代码会报一个ORA-00904 : "PWDGROUP".“PC”:标识符无效的错误!
但是,如果仅仅查询上面代码中嵌套的select语句:
select pwd.date_time,sum(pwd.product_count) as "pc" from PWD_PRODUCT pwd group by pwd.date_time
是完全正确毫无问题的。
现在看如何清除错误:
select ...
(select pwd.date_time,sum(pwd.product_count) as pc from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ....
改动不大。 pc 俩字儿的双引号去掉就行了。
另外一种情况:
select pwdGroup.* ,pwdGroup.产量
from
(select pwd.date_time,sum(pwd.product_count) as "产量" from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ...
这是允许的。
中文的另一种情况:
select pwdGroup.* ,pwdGroup.产量
from
(select pwd.date_time,sum(pwd.product_count) as 产量 from PWD_PRODUCT pwd group by pwd.date_time) pwdGroup ...
这也是允许的。
另,对于sql的as,我一直不是很了解加不加有啥区别。上面4条语句来看,没发现有啥区别。
总结下,非嵌套查询的话,as后面有没有双引号都可以。 嵌套查询的话,最好不要用双引号。否则英文的会出错。
不知道是个坑还仅仅是自己的环境问题。
另外说一句,实际项目中sql语句远比上面提到的复杂,几乎已经复杂到了耍流氓的程度,需求做到位,数据库画好,能省掉一半的工作量,如果允许/可以使用数据库持久框架,那是再愉悦不过了。需求做好,远离深坑。
最后,这些测试说明的sql都是记事本写的,错误请指出来,谢谢。