pingley
作者pingley·2013-07-21 13:59
软件开发工程师·福建富士通信息软件有限公司

DB2 SQL 中的别名小技巧

字数 2006阅读 14670评论 2赞 0
   下面提到的别名的技巧,虽然不是高深的问题,但是自己在开发中犯了几次这样的错误,在这里整理分享。
先在DB2和Oracle中分别创建如下的测试表。
create table table1
( col1   integer,
  col2   integer);
DB2:
insert into  table1
select * from (
select 1 col1,
       2 col2 from sysibm.sysdummy1) with ur ; 
报如下错误:SQL0104N  在 ")" 后面找到异常标记 ""。预期标记可能包括:"AS"。  SQLSTATE=42601
在DB2 中一个嵌套查询中的子查询,应该指定别名。在Oracle 中这样的写法是没有问题的。
DB2中正确的写法如下:
insert into  table1
select * from (
select 1 col1,
       2 col2 from sysibm.sysdummy1) as t with ur ;    
Oracle 中这句执行是正常的
insert into  table1
select * from (
select 1 col1,
       2 col2 from dual);  
除了上面这点,在DB2 中使用列别名需要注意下面的情况。下面这句SQL语句引用的列t.col1,t.col2 是无效的。
select t.col1,t.col2 from (
select 1 as col1,
       2 as col2 from sysibm.sysdummy1 
union all 
select 1,
       2  from sysibm.sysdummy1) as t with ur;
该语句将会报如下的错:SQL0206N  "T.COL1" 在使用它的上下文中无效。  SQLSTATE=42703
之所以报错是因为是因为引用的列名无效。DB2中如果不给select 语句中的列显式指定别名
将会使用选择的列在select 语句中的位次给定一个数值列别名,比如方式三中的1和2。
在DB2中将语句改写成下面的方式执行正确。
方式一:
select * from (
select 1 as col1,
       2 as col2 from sysibm.sysdummy1 
union all 
select 1,
       2  from sysibm.sysdummy1) as t with ur;
方式二:
select col1,col2 from (
select 1 as col1,
       2 as col2 from sysibm.sysdummy1 
union all 
select 1 col1,
       2 col2  from sysibm.sysdummy1) as t with ur;--as 关键字是可选的。
方式三:
select 1,2 from (
select 1 as col1,
       2 as col2 from sysibm.sysdummy1 
union all 
select 1,
       2  from sysibm.sysdummy1)  t with ur;--在这句中实际列的别名是1和2,而不是col1和col2。
在Oracle 中执行类似的语句是正确的:
select col1,col2 from (
select 1 as col1,
       2 as col2 from dual 
union all 
select 1,
       2  from dual )
另外需要注意的是DB2和Oracle 中group by 子句中不能引用列别名,但是order by 子句中可以引用。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论2 条评论

taylor840326taylor840326数据库管理员中国百盛集团
2013-07-22 09:24
lxpeng163lxpeng163项目经理哈尔滨银行
2013-07-21 22:36
Ctrl+Enter 发表

作者其他文章

  • DB2 SQL 中的and 和 or 的优先级
    评论 10 · 赞 4
  • 求取每月1号的两种方法
    评论 0 · 赞 0
  • ETL接口整理
    评论 3 · 赞 0
  • DB2 数值处理技巧
    评论 4 · 赞 2
  • SQL0220N错误解决
    评论 1 · 赞 1
  • 相关文章

    相关问题

    相关资料

    X社区推广