2017-06-23 1 views
0

Ich frage mich, ob jemand vielleicht helfen könnte.Unbekannte Spalte in 'On-Klausel' mit mehreren Joins

Ich bin immer wieder Fehler:

Error Code: 1054. Unknown column 'sub_claims_volume.Claims_Volume' in 'on clause'

wenn ich versuche, unten die Abfrage auszuführen.

Ich denke, es hat etwas mit der Verbindung zu der pi_loadings_claims_volume Tabelle zu tun.

Ich habe eine Tabelle aus der Sub-Abfrage generiert und hatte kein Problem, die Verknüpfung in diesem Fall und das korrekte Ergebnis zurückgegeben wurde.

SELECT bdx_pi_policy_accounts.policyid, 
    bdx_pi_policy_accounts.renewal, 
    sub_claims_volume.claims_volume, 
    pi_loadings_claims_volume.loading 
FROM bdx_pi_policy_accounts 
    LEFT JOIN pi_loadings_claims_volume 
    ON sub_claims_volume.claims_volume = 
    pi_loadings_claims_volume.claims_per_year 

LEFT JOIN (SELECT pi_claims.policyid, 
    RIGHT(pi_claims.policykey, 1) AS Renewal, 
    Count(pi_claims.claimid)  AS Claims_Volume 
    FROM pi_claims 
    GROUP BY pi_claims.policyid, 
    pi_claims.policykey) AS sub_claims_volume 
    ON bdx_pi_policy_accounts.policyid = sub_claims_volume.policyid 
    AND bdx_pi_policy_accounts.renewal = sub_claims_volume.renewal 

Antwort

1

Der Grund, warum es Unbekannte Spalte Fehler zeigt, ist, weil, wenn die join mit pi_loadings_claims_volume Tabelle ausgeführt wird, wird sub_claims_volume Tabelle alias nicht bekannt (wie i) und damit Abfrage Claims_Volume Spalte nicht erkennen kann.

die Tabellen in join Repositionierung (das heißt Platzierung sub_claims_volume Abfrage vor join Zustand) sollte es beheben, z.B .:

SELECT bdx_pi_policy_accounts.policyid, 
    bdx_pi_policy_accounts.renewal, 
    sub_claims_volume.claims_volume, 
    pi_loadings_claims_volume.loading 
FROM bdx_pi_policy_accounts 
LEFT JOIN (SELECT pi_claims.policyid, 
    RIGHT(pi_claims.policykey, 1) AS Renewal, 
    Count(pi_claims.claimid)  AS claims_volume 
    FROM pi_claims 
    GROUP BY pi_claims.policyid, 
    pi_claims.policykey) sub_claims_volume 
    ON bdx_pi_policy_accounts.policyid = sub_claims_volume.policyid 
    AND bdx_pi_policy_accounts.renewal = sub_claims_volume.renewal 
LEFT JOIN pi_loadings_claims_volume 
    ON sub_claims_volume.claims_volume = 
    pi_loadings_claims_volume.claims_per_year 
+0

Darshan, Vielen Dank. Ich hatte nicht in Erwägung gezogen, den Join neu zu positionieren. Das funktioniert perfekt. Freundliche Grüße. Dan – dsw

+0

Bitte fügen Sie Ihrer Antwort einen Kontext hinzu und erklären Sie, was Sie geändert haben und warum. Dies wird Ihre Antwort für zukünftige Besucher hilfreicher machen. – miken32

+0

@ miken32 hat den Kontext hinzugefügt –