Generalmente, las relaciones de uno a uno y de uno a varios se usan para unir dos segmentos diferentes, pertenecientes a dos orígenes distintos. Sin embargo, también puede unir el mismo origen de datos, o incluso un segmento, a sí mismo. Esta técnica se denomina join recursivo.
Consulte el manual Cómo crear informes con el lenguaje WebFOCUS para más información sobre los joins recursivos.
Suponga que tiene un origen de datos con un solo segmento, llamado MANAGER, que incluye el número de ID de un empleado, su nombre y el número de ID de su gerente, como se observa en la siguiente imagen.
Si quiere crear un informe que muestre el número de ID y el nombre de todos los empleados y gerentes, debe unir el segmento a sí mismo. Emita el siguiente comando:
JOIN MANAGER_ID IN MANAGER TO ID IN MANAGER AS BOSS
Esto crea la siguiente estructura:
Nota: Puede hacer referencia a campos, de forma única, en segmentos recursivos, de referencia cruzada, prefijando a ellos las cuatro primeras letras del nombre del join (BOSS, en este ejemplo). La única excepción es el campo de referencia cruzada, donde se prefija el alias en lugar del nombre.
Después de emitir el join, puede generar un conjunto de respuestas similar a éste:
ID NAME MANAGER_ID BOSSNAME -- ---- ---------- -------- 026255 JONES 837172 CRUZ 308743 MILBERG 619426 WINOKUR 846721 YUTANG 294857 CAPRISTI 743891 LUSTIG 089413 SMITH 585693 CAPRA 842918 JOHNSON
También puede unir estructuras más grandes de forma recursiva. Por ejemplo, observe el siguiente origen de datos, de dos segmentos, llamado AIRCRAFT, que almacena una lista de materiales de una empresa aeronáutica. El segmento raíz tiene el nombre y la descripción de una pieza, mientras que el segmento secundario muestra el nombre de una subpieza. Cada pieza puede disponer de muchas subpiezas. Este tipo de estructura unida aparece explicado en el siguiente diagrama.
Mientras que las piezas más grandes están compuestas por varios niveles de subpiezas, algunas de éstas, como las tuercas, se usan por toda la aeronave. Sería redundante, por tanto, asignar una instancia de segmento a cada aparición de esta subpieza. En su lugar, use el diseño de dos segmentos, mostrado anteriormente, y después una el origen de datos a sí mismo:
JOIN SUBPART IN AIRCRAFT TO PART IN AIRCRAFT AS SUB_PART
Esto da lugar a la siguiente estructura de datos.
WebFOCUS |