2016-11-04 5 views
1

ローカルCF & Luceeサーバで以下のクエリを比較していました。 ColdFusionサーバーがQoQランタイムエラーをスローします。しかし、Luceeで同じクエリを実行すると、必要なクエリ結果が返されます。なぜLuceeはQoQでカラムエイリアス名を考慮しない

U.UserIDテーブルリストから 内の任意のテーブルに一致しない選択されたカラム参照:これは別名考慮ため

<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サーバは、上記のコードでこのエラーをスローします。

しかし、Luceeサーバーはエイリアス名を考慮していないため、runはエラーなしで上記を実行します。 LuceeサーバーがQoQ列のエイリアス名を考慮しない理由を知っていますか?これに関するご意見やご提案をお寄せください。列の

答えて

7

getusersクエリ結果:

UserContactName | UserID

getusers上の前期比は、もはや記憶されている任意のテーブルに関連する情報を有しています。 UU.UserIDのように)を参照すると、ACFはQoQ内の(新しい)参照が、Uが意味するものを解決できることを期待しています。

Luceeはこれらの情報を保存し、エイリアスを使用して解決することができます。 You can check the source code how it parses the QoQ statement.

Luceeの機能に関係なく、QoQステートメントで元のエイリアスを削除することをお勧めします。クエリダンプで格納エイリアスについてのヒントがない場合でも、QoQステートメントのデバッグを検討してください。

関連する問題