2016-11-04 2 views
1

Ich habe die folgenden Abfragen in meinen lokalen CF & Lucee-Servern verglichen. Der ColdFusion-Server löst einen QoQ-Laufzeitfehler aus. Wenn ich dieselben Abfragen in Lucee ausführe, werden jedoch die erforderlichen Abfrageergebnisse zurückgegeben.Warum berücksichtigt Lucee den Spaltenaliasnamen in QoQ nicht?

<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#" /> 

Der CF-Server führt diesen Fehler auf dem obigen Code, weil er den Namen alias hält:

Die ausgewählte Spalte Referenz U.UserID keine Tabelle in den FROM Tabellenliste überein.

Allerdings berücksichtigt der Lucee-Server den Aliasnamen nicht, ran läuft die oben genannten ohne Fehler. Weiß jemand, warum der Lucee-Server den QoQ-Spaltenaliasnamen nicht berücksichtigt? Bitte teilen Sie Ihre Gedanken oder Vorschläge dazu mit.

Antwort

7

Die getusers Abfrage-Ergebnisse in den Spalten:

UserContactName | UserID

A gegenüber dem Vorquartal auf getusers nicht mehr hat jede Tabelle bezogenen Informationen gespeichert. Wenn Sie auf U verweisen (wie in U.UserID), erwartet ACF, dass eine (neue) Referenz in der QoQ in der Lage ist, zu lösen, was U bedeutet.

Lucee auf der anderen Seite speichert diese Informationen und kann sie mit einem Alias ​​auflösen. You can check the source code how it parses the QoQ statement.

Unabhängig von den Möglichkeiten von Lucee, schlage ich vor, frühere Aliase in QoQ-Anweisungen zu entfernen. Ziehen Sie in Betracht, eine QoQ-Anweisung zu debuggen, wenn Ihr Abfragedump Sie nicht einmal über gespeicherte Aliase informiert.

Verwandte Themen