1

我在本地 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 与 FROM 表列表中的任何表都不匹配。

但是,Lucee 服务器不考虑别名,运行上面没有错误。有谁知道为什么 Lucee 服务器不考虑 QoQ 列别名?请分享您对此的想法或建议。

4

1 回答 1

7

列中的getusers查询结果:

UserContactName | UserID

A QoQ ongetusers不再存储任何与表相关的信息。如果您引用U(如 中U.UserID),ACF 期望 QoQ 中的(新)引用能够解决U甚至意味着什么。

另一方面,Lucee 存储这些信息并可以使用别名来解析它。您可以查看源代码如何解析 QoQ 语句。

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

于 2016-11-04T11:13:43.777 回答