Cómo utilizar una join condicional

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.


Principio de página

x
Sintaxis: Cómo Crear una JOIN condicional

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:

INNER
Especifica una join izquierda externa. Si no especifica el tipo de join en el comando JOIN, la configuración de parámetro ALL determina el tipo de join a realizar.
LEFT_OUTER
Especifica un join izquierdo externo. Si no especifica el tipo de join en el comando JOIN, la configuración de parámetro ALL determina el tipo de join a realizar.
hostfile
Es el archivo máster del host.
AT
Enlaza el segmento principal o host correcto con el segmento secundario o de referencia cruzada. Los valores de campo utilizados como parámetro AT no se emplean para causar el enlace. Simplemente se utilizan como referencias de segmento.
hfld1
Es el nombre de campo situado en el archivo máster host cuyo segmento se va a unir al origen de datos de referencia cruzada. El nombre de campo debe estar al menor nivel de segmento en su origen de datos que se ha mencionado.
tag1
Es el nombre de etiqueta opcional, con un máximo de 66 caracteres, que se utiliza como calificador único para campos y alias en el origen de datos host.
hfld2
Es un campo de origen de datos con el que se asocia un JOIN, condicional basada en DEFINE. En un join condicional basado en DEFINE, el ajuste KEEPDEFINES debe estar activado y se deben crear los campos virtuales antes de emitir el comando JOIN.
MULTIPLE
Especifica una relación de uno a varios entre hostfile y crfile. Fíjese que ALL es sinónimo de MULTIPLE.
UNIQUE
Especifica una relación de uno a uno entre hostfile y crfile. Tenga en cuenta que ONE es sinónimo de UNIQUE.

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.

crfile
Es el archivo máster de referencia cruzada.
crfld
Es el nombre del campo join del archivo máster de referencia cruzada. Puede ser cualquier campo en el segmento.
tag2
Es el nombre de etiqueta opcional, con un máximo de 66 caracteres, que se utiliza como calificador único en campos y alias en el origen de datos de referencia cruzada.
joinname
Es el nombre asociado a la estructura join.
expression1, expression2
Cualquier expresión aceptable en un comando DEFINE FILE. Todos los campos utilizados en las expresiones deben estar en una ruta individual.
END

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.



Ejemplo: Cómo utilizar una join condicional

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