我正在比较我当地的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列别名?请分享您对此的想法或建议。
答案 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语句。