• No se han encontrado resultados

D016-TemplatedeprogramaconInnerJoin.docx

N/A
N/A
Protected

Academic year: 2020

Share "D016-TemplatedeprogramaconInnerJoin.docx"

Copied!
6
0
0

Texto completo

(1)

Template de Programa Read Table

Read Table o LoopFor all entriesInner Join o Left Join

Read Table o Loop

Usamos el read table para leer la segunda table, cuando estamos seguros que para cada codigo leido en la primer table existe solo y solo un registro, ya que el read table toma solo el primer registro que aplique a la clave y sale.

Cuando sabemos que la segunda tabla no tiene claves repetidas podemos usar el

READ TABLE

de la siguiente manera.

*Types de Datos

TYPES: BEGIN OF ty_tickets,   ticket LIKE ztickets-ticket,   usuario LIKE ztickets-usuario,

  cod_cliente LIKE ztickets-cod_cliente,   END OF ty_tickets.

TYPES: BEGIN OF ty_clientes,

  cod_cliente LIKE zclientes-cod_cliente,   nombre LIKE zclientes-nombre,

  END OF ty_clientes.

*Tablas internas y Workareas

DATA: it_tk TYPE TABLE OF ty_tickets,       wa_tk TYPE ty_tickets.

DATA: it_cli TYPE TABLE OF ty_clientes,      wa_cli TYPE ty_clientes.

*Consultas a las tablas por separado SELECT ticket usuario cod_cliente   FROM ztickets

  INTO TABLE it_tk.

(2)

  INTO TABLE it_cli.

*Recorro la primer tabla dentro del area de trabajo (Word Area) LOOP AT it_tk INTO wa_tk.

  

* Leo la segunda tabla donde el cod_cliente coincida con el que tengo en  la WA_tk

  READ TABLE it_cli        INTO wa_cli

       WITH KEY cod_cliente = wa_tk.

* Si encontro datos, imprimir en pantalla 

  IF sy-subrc = 0.

    WRITE: / wa_tk-ticket,

       wa_cli-cod_cliente,        wa_cli-nombre.   ENDIF.

ENDLOOP.

Sino tenemos que hacerlo con un

Loop anidado

, con esto nos garantizamos que el programa contemple todos los registros que coincidan con la clave.

*Recorro la primer tabla dentro del area de trabajo (Word Area) LOOP AT it_tk INTO wa_tk.

* Recorro la segunda tabla donde el cod_cliente coincida con el que tengo  en la WA_tk

  LOOP AT it_cli        INTO wa_cli

       WHERE cod_cliente = wa_tk.

* Imprimir en pantalla

    WRITE: / wa_tk-ticket,

       wa_cli-cod_cliente,        wa_cli-nombre.   ENDLOOP.

(3)

For all entries

Siguiendo en caso anterior, hacemos dos select el de la tabla ZTICKET y el de la tabla ZCLIENTES.

Pero si tuviéramos el caso de que en la tabla tickets tengo solo dos registros, y en la de Clientes tenemos 100.

Porque vamos a seleccionar esos 100 clientes si solo vamos a usar 2 cuando recorremos la tabla de tickets.

Entonces vamos a hacer el select de la tabla cliente SOLO PARA LAS ENTRADAS o REGISTROS seleccionados en la tabla it_tk indicándole los campos que comparten.

*Consultas a las tablas por separado SELECT ticket usuario cod_cliente   FROM ztickets

  INTO TABLE it_tk.

SELECT cod_cliente nombre   FROM zclientes

  FOR ALL ENTRIES IN it_tk

  WHERE cod_cliente = it_tk-cod_cliente.   

Inner Join y Left join

El Inner Join sirve para obtener dentro de una misma tabla interna datos de dos tablas haciendo solo un Select.

Para replicar el caso anterior vamos a hacer una tabla interna que contenga los campos de ZTICKETS y ZCLIENTES

*Types de Datos

TYPES: BEGIN OF ty_tkn,

  ticket LIKE ztickets-ticket,   usuario LIKE ztickets-usuario,

(4)

  nombre LIKE zclientes-nombre,   END OF ty_tkn.

*Tablas internas y Workareas

DATA: it_tkn TYPE TABLE OF ty_tkn,       wa_tkn TYPE ty_tkn.

Entonces procedemos a realizar la consulta paso a paso:

1 – campos a consultar

Select tickets usuario cod_cliente nombre

2 – tablas a consultar

Select tickets usuario cod_cliente nombre

  from ztickets        zclientes

3 – Juntamos las tablas, indicamos los alias e indicamos de que tabla consultar cada campo

Select t~tickets t~usuario t~cod_cliente c~nombre   from       ztickets  as t

  inner join zclientes as c

4 – Relacionamos las tablas a unir

Select t~tickets t~usuario t~cod_cliente c~nombre   from       ztickets as t

  inner join zclientes as c

  on t~cod_cliente = c~cod_cliente

5 – agregamos la table donde nos va a dejar los datos

Select t~tickets t~usuario t~cod_cliente c~nombre

  into table it_tkn

  from       ztickets as t   inner join zclientes as c

(5)

6 – Por ultimo si tuvieramos parametros de selection podriamos agregar los where que quisieramos

Entonces luego de tener el Select nos queda hacer el Loop normal

LOOP AT it_tkn INTO wa_tkn.

* Imprimir en pantalla

    WRITE: / wa_tkn-ticket,        wa_tkn-usuario,        wa_tkn-cod_cliente,        wa_tkn-nombre. ENDLOOP.

Template terminado:

*Types de Datos

TYPES: BEGIN OF ty_tkn,

  ticket LIKE ztickets-ticket,   usuario LIKE ztickets-usuario,

  cod_cliente LIKE ztickets-cod_cliente,   nombre LIKE zclientes-nombre,

  END OF ty_tkn.

*Tablas internas y Workareas

DATA: it_tkn TYPE TABLE OF ty_tkn,       wa_tkn TYPE ty_tkn.

Select t~tickets t~usuario t~cod_cliente c~nombre   into table it_tkn

  from       ztickets as t   inner join zclientes as c

  on t~cod_cliente = c~cod_cliente.   

LOOP AT it_tkn INTO wa_tkn.

* Imprimir en pantalla

(6)

ENDLOOP.

Hay que tener en cuenta que el inner join solo devuelve los valores que estén en las dos tablas, si por ejemplo tenemos un registro de la tabla tickets con un cod?cliente que no existe en la tabla cliente ese registro no lo va a traer.

En el caso de que lo quisiéramos tendríamos que usar:

Referencias

Documento similar

Gastos derivados de la recaudación de los derechos económicos de la entidad local o de sus organis- mos autónomos cuando aquélla se efectúe por otras enti- dades locales o

En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Prurito como fe diftingue de laxitud Par qué cn el rigor fc refrían las par- PIbn lepra, horror,y rigor.. Primer

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

Las necesidades de una sociedad campesina cada vez más numerosa por una parte y las solicitaciones comerciales de la economía urbana más o menos sentidas en los campos por otra

(29) Cfr. MUÑOZ MACHADO: Derecho público de las Comunidades Autóno- mas, cit., vol. Es necesario advertir que en la doctrina clásica este tipo de competencias suele reconducirse