Количество показов: 1932
Опубликован: 2007-05-11 05:38:15

Вопрос: Почему под FIBPlus 6.5 на некоторых запросах стала появляться ошибка
"COLUMN The column ... was specified multiple times for derived table unnamed."?

Пример такого запроса:

SELECT PAYMENTS.ID,PAYMENTS.DATE_ORDER,PAYMENTS.SERVICE_STATUS,
MAIN.ID,MAIN.CLNT,CLIENTS.ID,CLIENTS.R FROM PAYMENTS
LEFT JOIN MAIN ON PAYMENTS.ID_COMPANY=MAIN.ID
LEFT JOIN CLIENTS ON MAIN.clnt=CLIENTS.ID
WHERE PAYMENTS.SERVICE_STATUS=0 AND PAYMENTS.DATE_ORDER IS NOT NULL

При этом запрос работает, везде (в IBExpert, console и т.д.)

Ответ: Вы пытаетесь выполнить этот запрос из pFIBDataset с включенной опцией poAskRecordCount для сервера Firebird 2.x.

Дело в том, что под Firebird 2.x poAskRecordCount работает через Select Count(*) from (Select...)

Для вашего запроса это будет так:

Select Count(*) from (SELECT PAYMENTS.ID,PAYMENTS.DATE_ORDER,PAYMENTS.SERVICE_STATUS,
MAIN.ID,
MAIN.CLNT,CLIENTS.ID,CLIENTS.R FROM PAYMENTS LEFT JOIN MAIN ON PAYMENTS.ID_COMPANY=MAIN.ID LEFT JOIN CLIENTS ON MAIN.clnt=CLIENTS.ID WHERE PAYMENTS.SERVICE_STATUS=0 AND PAYMENTS.DATE_ORDER IS NOT NULL )

Firebird 2.x этот запрос выполнить не в состоянии и выдает именно ту ошибку, которую вы привели. Иными словами, ошибка не в вашем изначальном запросе, а в запросе, который реализует функцию poAskRecordCount.

Если переписать ваш изначальный запрос как:

SELECT PAYMENTS.ID,PAYMENTS.DATE_ORDER,PAYMENTS.
SERVICE_STATUS,MAIN.ID ID1 ,MAIN.CLNT,CLIENTS.ID ID2,CLIENTS.R FROM PAYMENTS LEFT JOIN MAIN ON PAYMENTS.ID_COMPANY=MAIN.ID LEFT JOIN CLIENTS ON MAIN.clnt=CLIENTS.ID WHERE PAYMENTS.SERVICE_STATUS=0 AND PAYMENTS.DATE_ORDER IS NOT NULL

то все будет прекрасно работать. Так что в этой ситуации придется или выключить в датасете опцию poAskRecordCount, или переписать запрос.

Специальные цены для ex-USSR (кроме стран ЕС):

235 Euro
1500 руб. для физ. лиц
3600 руб. для юр. лиц

Скидки при покупке нескольких копий!

Вот уйду я от вас на IBX. И буду всю жизнь от их неполноценности страдать... Да Джефа не добрым словом поминать... :) >>

Александр Береснев
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Customer's Center

Все об InterBase, Firebird и Yaffil. Новости, статьи, интервью, ссылки...