Как исправить ошибку Dynamic Sql: -104;Token Unkown - использование подзапроса в предложении where для фильтрации по максимальной дате - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь сделать запрос в базу данных Firebird в первый раз и получаю

Dynamic SQL Error -104; Token Unknown.
line 11, column 30; AS 
[SQLState:42000, ISC error code:335544634] 
Error Code: 335544634 

Кажется, проблема с предложением WHERE.CERT_DATE - это тип данных TIMESTAMP.Спасибо!

Я пробовал кастовать как TIMESTAMP, думая, что это может быть ошибкой, но я получил те же результаты.Любая помощь будет принята с благодарностью.

SELECT 
    EVENTS.DONE_BY_FNAME,
    CERTS.CERT_NUM,
    CERTS.CERT_DATE,
    CERTS.GAGE_SN,
    EVENTS.VENDOR

FROM EVENTS INNER JOIN CERTS ON CERTS.EVENT_NUM = EVENTS.EVENT_NUM
WHERE CERTS.CERT_DATE = 
        (SELECT MAX(Z.CERT_DATE)
                  FROM CERTS AS Z 
                  WHERE Z.EVENT_NUM = CERTS.EVENT_NUM
        )

Ожидаемые результаты

DONE_BY_FNAME    CERT_NUM    CERT_DATE                GAGE_SN    VENDOR          
GRES             12308       2019-01-14 00:00:00.0    AI0186     NW WELDERS                   

1 Ответ

0 голосов
/ 30 января 2019

Ошибка указывает, что вы используете Firebird 1.5 или ниже.Проблема заключается в том, что Firebird 1.5 и ниже не поддерживают AS для определения псевдонимов таблиц.

В InterBase 6, Firebird 1 и Firebird 1.5 предложение FROM было определено как (из справочника по языку InterBase 6.0):

FROM <tableref> [, <tableref> …]

<tableref> = <joined_table> | table | view | procedure
    [(<val> [, <val> …])] [alias] 

Как видите, этот синтаксис не допускает AS до alias (в противном случае это было бы [[AS] alias]).Эта поддержка дополнительного токена AS была добавлена ​​в Firebird 2.0 как часть поддержки Производные таблицы .

В качестве краткосрочного решения замените CERTS AS Z на CERTS Z.

Вы должны действительно обновить хотя: Firebird 1.5 больше не поддерживается (поддержка была прекращена почти 10 лет назад!) И содержит известные проблемы безопасности, которые были исправлены в более поздних выпусках Firebird.

...