为什么Lucee不考虑QoQ中的列别名

时间:2016-11-04 08:39:08

标签: coldfusion coldfusion-10 lucee qoq

我正在比较我当地的CF& Lucee服务器。 ColdFusion服务器抛出QoQ运行时错误。但是,当我在Lucee中执行相同的查询时,它会返回所需的查询结果。

<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服务器不考虑别名,run运行上面没有错误。有谁知道为什么Lucee服务器不考虑QoQ列别名?请分享您对此的想法或建议。

1 个答案:

答案 0 :(得分:7)

getusers查询会产生以下列:

UserContactName | UserID

getusers上的QoQ不再存储任何与表相关的信息。如果您引用U(如U.UserID中所述),则ACF希望QoQ中的(新)引用能够解析U甚至意味着什么。

另一方面,Lucee存储这些信息并可以使用别名来解决它。 You can check the source code how it parses the QoQ statement.

无论Lucee的功能如何,我建议在QoQ语句中删除以前的别名。当您的查询转储甚至没有提示您存储的别名时,请考虑调试QoQ语句。