Frage

Ich habe eine Haupttabelle, aus der ich Daten abrufen muss.Ich habe einen linken äußeren Join, bei dem die Felder in 40 % der Fälle übereinstimmen.Und dann habe ich einen weiteren Join, mit dem ich die Daten aus Tabelle A abgleichen muss.

Dies ist das SQL im Pseudocode.Diese Abfrage funktioniert nicht.

– Das ist der Teil, den ich machen möchte, aber es funktioniert nicht.UND H.COL3 = A.STATE????

Ich arbeite mit IBM DB2.

SELECT DISTINCT
  APP_NO as app_no,
  A.STATE as state
  ...
  ... Fields
  ...
FROM 
  TABLE_A A
LEFT OUTER JOIN  
  TABLE_B HIST
ON
  HIST.COL1 = A.COL1
, TABLE_C B  
LEFT OUTER JOIN
  TABLE_D H  
ON
  H.COL2 = B.COL2
-- This is the part I want to do but doesn't work.
AND
  H.COL3 = A.STATE????
WHERE
  A.BRANCH = 'Data'
War es hilfreich?

Lösung

Ich denke, Sie könnten es so umschreiben (aber ich könnte Ihre Aussage falsch interpretieren)

FROM 
  TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON
      HIST.COL1 = A.COL1
  LEFT OUTER JOIN TABLE_D H ON 
      H.COL3 = A.STATE
  LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2
WHERE
  A.BRANCH = 'Data'

Außerdem heißt es im IBM-Dokument zu diesem Fehler:

Eine mit einem JOIN-Operator oder in einer MERGE-Anweisung verknüpfte ON-Klausel ist ungültig.Erläuterung:

Spaltenverweise in einer ON-Klausel dürfen nur auf Spalten von Tabellen verweisen, die im Geltungsbereich der ON-Klausel liegen.

Ich könnte mich also irren, es sieht einfach wie die fehlerhafte ON-Klausel aus, wenn die äußere Verknüpfung „H.COL3 = A.STATE“ außerhalb des Geltungsbereichs der On-Klausel liegt, weil die Tabelle A nicht in diesem Geltungsbereich liegt.

Andere Tipps

Was passiert, wenn man die "AND H.COL3 = A.STATE" put in Ihrer WHERE-Klausel?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top