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.
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:
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.
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.
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 |