DB2中的列别名的内部联接

时间:2014-03-14 12:09:25

标签: sql db2 inner-join alias

我有一个更复杂的查询,内部联接会引发错误:

  

[错误代码: - 206,SQL状态:42703] DB2 SQL错误:SQLCODE = -206,   SQLSTATE = 42703,SQLERRMC = TT.ALIAS,DRIVER = 4.13.127。 2)[错误代码:   -727,SQL状态:56098] DB2 SQL错误:SQLCODE = -727,SQLSTATE = 56098,SQLERRMC = 2; -206; 42703; TT.ALIAS,DRIVER = 4.13.127

不起作用的查询的简单版本是:

select column1 as alias from table1 tt
inner join table1 ts
on tt.alias = ts.column1

这个简单的查询没有意义,但它是我试图运行的查询的简单版本。 这应该没有错误运行吗?如果我删除它运行的别名没有问题..

提前致谢

1 个答案:

答案 0 :(得分:3)

您不能在onwhere子句中使用列别名。你可以这样做:

select column1 as alias
from table1 tt inner join
     table1 ts
     on tt.column1 = ts.column1;

你也可以这样做:

select alias
from (select column1 as alias
      from table1
     ) tt inner join
     table1 ts
     on tt.alias = ts.column1;

在编译阶段,查询将按子句进行评估,首先是from子句,然后是whereselect。换句话说,编译器在评估select时不会“知道”from中的内容。