Расчетный результат в 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'

Это использует версию Firebird с LibreOffice 6.1.3

1 ответ

Решение

Вы не можете использовать псевдонимы из SELECT список столбцов в WHERE-clause: вам нужно использовать оригинальный столбец; список столбцов выбора оценивается после 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.

Другие вопросы по тегам