2016-11-04 2 views
1

Я сравнивал следующие запросы на моем локальном сервере CF & Lucee. Сервер ColdFusion генерирует ошибку времени выполнения QoQ. Однако, когда я выполняю те же запросы в Lucee, он возвращает нужные результаты запроса.Почему Lucee не упоминает имя псевдонима столбца в QoQ

<cfquery name="getusers" datasource="myDSN"> 
    SELECT 
     UC.UserContactName, U.UserID 
    FROM Users U 
     INNER JOIN UserContacts UC ON U.UserID = UC.UserID 
    WHERE U.UserID in (99,52,41,76,15) 
</cfquery> 

<cfquery name="getContactName" dbtype="query"> 
    SELECT UserContactName FROM getusers 
    WHERE U.UserID = <cfqueryparam value="76" cfsqltype="cf_sql_integer"> 
</cfquery> 

<cfdump var="#getContactName#" /> 

Сервер CF выдает эту ошибку на приведенном выше коде, так как он считает псевдоним:

Выбранная ссылка на столбец U.UserID не совпадает ни с одной таблицы в из списка таблиц.

Однако сервер Lucee не учитывает имя псевдонима, он запускает вышеуказанное без ошибок. Кто-нибудь знает, почему сервер Lucee не рассматривает имя псевдонима в QoQ? Поделитесь своими мыслями или предложениями об этом.

ответ

7

В getusers результаты запроса в столбцах:

UserContactName | UserID

относительно предыдущего квартала на getusers больше не имеет какой-либо информации, связанной таблицы, хранящейся. Если вы ссылаетесь на U (как в U.UserID), ACF ожидает (новую) ссылку в QoQ, чтобы иметь возможность разрешить то, что означает U.

Lucee, с другой стороны, хранит эту информацию и может разрешить ее с помощью псевдонима. You can check the source code how it parses the QoQ statement.

Независимо от возможностей Lucee, я предлагаю удалить прежние псевдонимы в операциях QoQ. Рассмотрим отладку инструкции QoQ, когда дамп вашего запроса даже не намекает на сохраненные псевдонимы.