Comment : |
A l'aide de la syntaxe JOIN conditionnelle, vous pouvez établir des jointures selon des conditions autre que l'égalité entre champs. De plus, les champs d'hôte et de référence ne doivent pas nécessairement contenir des formats correspondants, et le champ de référence croisée ne doit pas être indexé.
La jointure conditionnelle est prise en charge pour FOCUS, et par VSAM, ADABAS, IMS, IDMS, et toutes les sources de données relationnelles. Comme chaque source de données a différentes capacités de traiter les critères WHERE complexes, l'optimisation de la syntaxe JOIN conditionnelle diffère selon les sources de données particulières faisant partie de la jointure ainsi que la complexité des critères WHERE.
La commande standard ? JOIN liste toutes les jointures actuellement actives, et indique celles qui sont basées sur les critères WHERE.
La syntaxe de commande JOIN conditionnelle (basée WHERE) est
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
où :
Remarque : indépendamment du caractère de la jointure interne ou externe (JOIN—INNER ou LEFT_OUTER—), la jointure vers UNIQUE ne retournera qu'une seule instance du fichier de référence croisée, et si cette instance ne correspond pas, en fonction de l'évaluation de l'expression WHERE, les valeurs par défaut (des espaces pour les champs alphanumériques et 0 pour les champs numériques) sont retournés. Il n'y a jamais de chemins courts ni de valeurs manquantes dans le fichier de références croisées.
La commande END est nécessaire pour quitter la commande et doit s'agir d'une ligne seule.
Remarque : la syntaxe JOIN sur une seule ligne n'est pas prise en charge.
L'exemple suivant joint les sources de données VIDEOTRK et MOVIES à condition que :
La jointure s'effectue au segment contenant MOVIECODE dans la source de données VIDEOTRK, car la jointure doit s'effectuer au segment référencé le plus bas.
La requête suivante affiche le titre, la date de transaction la plus récente et la date de sortie de chaque film faisant partie de la jointure, et calcule le nombre d'années entre cette date de transaction et la date de sortie :
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
La sortie est :
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 |