Cómo: |
La sintaxis JOIN le permite establecer joins basadas en condiciones distintas a la de igualdad entre campos. Además, los campos join de host y referencia cruzada no tienen que contener formatos coincidentes y el archivo de referencia cruzada no tiene que estar indexado.
El join condicional es compatible con FOCUS, VSAM, ADABAS, IMS, IDMS y todos los orígenes de datos relacionales. Dado que cada origen de datos difiere en su capacidad para manejar criterios WHERE complejos, la optimización de la sintaxis de JOIN condicional difiere dependiendo de los orígenes de datos específicos involucrados en la join y de la complejidad de los criterios WHERE.
El comando ? JOIN estándar lista cada join activa en el momento e indica cualquiera que se base en criterios WHERE.
La sintaxis del comando JOIN condicional (basada en WHERE) es
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
donde:
Nota: Independientemente del carácter de JOIN—INNER o LEFT_OUTER—el join con UNIQUE sólo devuelve una instancia del archivo de referencia cruzada y, si ésta no coincide según la evaluación de la expresión WHERE, se devuelven valores por defecto (espacios para los campos alfanuméricos y 0, para los numéricos). El archivo de referencia cruzada nunca presenta rutas cortas ni valores no disponibles.
El uso del comando END es obligatorio para finalizar el comando y debe ocupar una línea para sí solo.
Nota: No se admite la sintaxis JOIN de línea individual.
El ejemplo que sigue combina los orígenes de datos VIDEOTRK y MOVIES con la condición de que:
La join sea realizada en el segmento que contiene MOVIECODE en el origen de datos VIDEOTRK, porque la join deben tener lugar en el más inferior de los segmentos mencionados.
La siguiente solicitud muestra el título, la fecha de transacción más reciente y la fecha de estreno de cada película en la join y calcula el número de años entre esta fecha de transacción y la fecha de estreno.
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 salida es:
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 |