Firebird 中的计算结果 SELECT

Calculated result in Firebird SELECT

谁能解释一下为什么会这样:

Select C1, C2, C1 + C2 as C3
from V1,V2
where C2 > 0

Select C1, C2, C1 + C2 as C3
from V1,V2
where C3 > 0

给出以下错误:

*Dynamic SQL Error
*SQL error code = -206
*Column unknown
*C3
*At line 1, column 53
caused by
'isc_dsql_prepare'

这是使用带有 LibreOffice 6.1.3 的 Firebird 版本

您不能在 WHERE 子句中使用来自 SELECT 列列表的别名:您需要使用原始列; select 的列列表在 where 之后 求值。换句话说,您需要使用 where C1 + C2 > 0

或者,您需要使用子查询:

select * 
from (Select C1, C2, C1 + C2 as C3 from V1,V2) a
where C3 > 0 

我强烈建议您开始使用 SQL-92 显式连接,因为它们比 SQL-89 隐式连接更具可读性。