Einen bedingten Join verwenden

Vorgehensweise:

Unter Verwendung der bedingten JOIN-Syntax können Sie Joins einrichten, die auf anderen Bedingungen als auf Gleichheit der Felder basieren. Das Format der Host- und Querverweis-Join-Felder muss außerdem nicht übereinstimmen und das Querverweisfeld muss nicht indiziert sein.

Der bedingte Join wird von FOCUS und VSAM, ADABAS, IMS, IDMS sowie von allen relationalen Datenquellen unterstützt. Da sich jede Datenquelle in der Fähigkeit unterscheidet, komplexe WHERE-Kriterien handhaben zu können, unterscheidet sich die Optimierung der bedingten JOIN-Syntax je nachdem, welche Datenquellen im Join enthalten sind und wie komplex die WHERE-Kriterien sind.

Der standardmäßige ? JOIN-Befehl listet alle Joins auf, die derzeit wirksam sind, und zeigt an, welche auf WHERE-Kriterien basieren.


Nach oben

x
Syntax: Einen bedingten JOIN erstellen

Die Syntax des bedingten (auf WHERE basierenden) JOIN-Befehls ist

JOIN [LEFT_OUTER|INNER] FILE hostfile AT hfld1     [WITH hfld2] [TAG tag1]
     TO {UNIQUE|MULTIPLE} 
     FILE crfile AT crfld [TAG tag2] [AS joinname]
     [WHERE expression1;
     [WHERE expression2;
     ...]
END

Hierbei gilt:

INNER
Gibt einen inneren Join an. Wenn Sie im JOIN-Befehl nicht den Typ des Joins spezifizieren, dann bestimmt die Einstellung des ALL-Parameters den Typ des Joins, der ausgeführt werden soll.
LEFT_OUTER
Spezifiziert einen linken äußeren Join. Wenn Sie im JOIN-Befehl nicht den Typ des Joins spezifizieren, dann bestimmt die Einstellung des ALL-Parameters den Typ des Joins, der ausgeführt werden soll.
hostfile
Ist die Host-Masterdatei.
AT
Verknüpft das richtige übergeordnete Segment oder Host mit dem gewünschten untergeordneten oder querverwiesenen Segment. Die Feldwerte, die als AT-Parameter eingesetzt werden, sind nicht für die Erstellung des Links verantwortlich. Sie dienen lediglich als Segmentverweise.
hfld1
Ist der Feldname in der Hostdatei, dessen Segment mit der querverwiesenen Datenquelle durch einen Join verknüpft wird. Der Feldname muss sich im Segment der untersten Ebene der Datenquelle befinden, auf die verwiesen wird.
tag1
Ist ein optionaler Tag-Name, der als eindeutige Kennzeichnung für Felder und Aliasse in der Host-Datenquelle verwendet wird.
hfld2
Ist ein Datenquellenfeld mit dem ein auf DEFINE basierender bedingter JOIN assoziiert werden soll. Für einen auf DEFINE basierenden bedingten Join muss KEEPDEFINES auf ON gestellt werden und Sie müssen die virtuellen Felder erstellen, bevor Sie den JOIN-Befehl eingeben.
MULTIPLE
Spezifiziert eine ein zu vielen-Beziehung zwischen from_file und to_file. Beachten Sie, dass ALL ein Synoym für MULTIPLE ist.
UNIQUE
Gibt eine 1:1-Beziehung zwischen from_file und to_file an. Beachten Sie, dass ONE ein Synonym für UNIQUE ist.

Hinweis: Unabhängig von der Art des JOIN—INNER oder LEFT_OUTER, gibt der Join mit UNIQUE nur eine Instanz der Querverweisdatei zurück, und wenn diese Instanz nicht passt basierend auf der Bewertung der WHERE-Formel, werden Defaultwerte (Leerzeichen für alphanumerische Felder und 0 für numerische Felder) zurückgegeben. Es gibt in der Querverweisdatei nie Kurzpfade oder fehlende Werte.

crfile
Ist die querverwiesene Masterdatei.
crfld
Ist der Join-Feldname in der querverwiesenen Masterdatei. Jedes Feld im Segment ist dafür geeignet.
tag2
Ist der optionale Tag-Name, der als eindeutige Kennzeichnung für Felder und Aliasse in der querverwiesenen Datenquelle verwendet wird.
joinname
Ist der Name, der mit der Join-Struktur assoziiert wird.
expression1, expression2
Sind alle Formeln, die in einem DEFINE FILE-Befehl gültig sind. Alle Felder, die in der Formel verwendet werden, müssen sich auf einem einzelnen Pfad befinden.
END

Der Befehl END ist erforderlich, um den Befehl zu beenden, und der Befehl muss sich auf einer eigenen Zeile befinden.

Hinweis: Einzeilige JOIN-Syntax wird nicht unterstützt.



Beispiel: Einen bedingten Join verwenden

Das folgende Beispiel verbindet die Datenquellen VIDEOTRK und MOVIES unter folgenden Bedingungen:

Der Join wird am Segment ausgeführt, das MOVIECODE in der VIDEOTRK-Datenquelle enthält, da der Join sich im untersten Segment befinden muss, auf das verwiesen wird.

Die folgende Anfrage zeigt den Titel, das letzte Transaktionsdatum und das Veröffentlichungsdatum für jeden Film im Join an. Sie berechnet außerdem die Anzahl der Jahre zwischen dem Transaktionsdatum und dem Veröffentlichungsdatum:

JOIN FILE VIDEOTRK AT MOVIECODE TAG V1 TO ALL 
     FILE MOVIES   AT RELDATE   TAG M1 AS JW1
  WHERE DATEDIF(RELDATE, TRANSDATE,'Y') GT 10;
  WHERE V1.MOVIECODE EQ M1.MOVIECODE;
END
TABLE FILE VIDEOTRK
 SUM TITLE/A25 AS 'Title'
     TRANSDATE AS 'Last,Transaction'
     RELDATE AS 'Release,Date'
 COMPUTE YEARS/I5 = (TRANSDATE - RELDATE)/365;  AS 'Years,Difference'
 BY TITLE NOPRINT
 BY HIGHEST 1 TRANSDATE NOPRINT
END

Die Ausgabe ist:

                           Last         Release   Years
Title                      Transaction  Date      Difference
-----                      -----------  -------   ----------
ALICE IN WONDERLAND        91/06/22     51/07/21          39
ALIEN                      91/06/18     80/04/04          11
ALL THAT JAZZ              91/06/25     80/05/11          11
ANNIE HALL                 91/06/24     78/04/16          13
BAMBI                      91/06/22     42/07/03          49
BIRDS, THE                 91/06/23     63/09/27          27
CABARET                    91/06/25     73/07/14          17
CASABLANCA                 91/06/27     42/03/28          49
CITIZEN KANE               91/06/22     41/08/11          49
CYRANO DE BERGERAC         91/06/20     50/11/09          40
DEATH IN VENICE            91/06/26     73/07/27          17
DOG DAY AFTERNOON          91/06/23     76/04/04          15
EAST OF EDEN               91/06/20     55/01/12          36
GONE WITH THE WIND         91/06/24     39/06/04          52
JAWS                       91/06/27     78/05/13          13
MALTESE FALCON, THE        91/06/19     41/11/14          49
MARTY                      91/06/19     55/10/26          35
NORTH BY NORTHWEST         91/06/21     59/02/09          32
ON THE WATERFRONT          91/06/24     54/07/06          36
PHILADELPHIA STORY, THE    91/06/21     40/05/06          51
PSYCHO                     91/06/17     60/05/16          31
REAR WINDOW                91/06/17     54/12/15          36
SHAGGY DOG, THE            91/06/25     59/01/09          32
SLEEPING BEAUTY            91/06/24     75/08/30          15
TIN DRUM, THE              91/06/17     80/03/01          11
VERTIGO                    91/06/27     58/11/25          32

WebFOCUS