PDA

Ver la Versión Completa : consulta a 3 tablas en 2 tablas internas sin perder datos


ClaudioC
30/10/09, 19:45:40
Hola!
Les hago un planteo mas de logica que de codigo creo yo:

Tengo que consultar una tabla X, en donde levanto n registros a una it_1.

De esos n registros que levante de la it_1, me interesan 2 registros por los cuales consulto a otra tabla, en la cual ambos son clave primaria, cosa que me devuelva 1 registro por cada consulta y los guardo en una it_2.

Por cada resultado en esta it_2, consulto una tercera tabla con estos datos que me dan 1 resultado por consulta y deseo guardarlo en la tabla it_1 en el registro que corresponda a la busqueda, para luego mostrar todos estos datos desde esta misma tabla interna en un ALV.

Por si no se entendio, un ejemplo seria el siguiente:

SELECT REG1 REG2 REG3 REG4
FROM TABLA1
INTO TABLE IT_1
WHERE NOMBRE_USUARIO IN S_NOMBRE.

SORT IT_1 BY REG1 REG2 REG3 REG4.

SELECT AAA1 AAA2
FROM TABLA2
INTO TABLE IT_2
FOR ALL ENTRIES IN IT_1
WHERE REG1 = IT_1-REG AND
REG2 = IT_1-REG2.

SELECT XXX
FROM TABLA3
INTO CORRESPONDING FIELDS OF IT_1
FOR ALL ENTRIES IN IT_2
WHERE AAA1 = IT_2-AAA1 AND
AAA2 = IT_2-AAA2.

La idea es que cada resultado que obtengo de la tabla 3 me lo agregue en la IT_1 en su correspondiente campo ya declarado previamente.

Que debo modificar o como deberia hacerlo?

DavidXD_XD
30/10/09, 20:17:24
Holas, yo lo haria en un solo SELECT, en una tabla interna con estos campos

TYPES: BEGIN OF ty_itab,
reg1 TYPE tabla1-reg1,
reg2 TYPE tabla1-reg2,
reg3 TYPE tabla1-reg3,
reg4 TYPE tabla1-reg4,
aaa1 TYPE tabla2-aaa1,
aaa2 TYPE tabla2-aaa2,
xxx TYPE tabla3-xxx,
END OF ty_itab.

DATA: gt_itab TYPE TABLE OF ty_itab.

START-OF-SELECTION.

SELECT a~reg1 a~reg2 a~reg3 a~reg4 b~aaa1 b~aaa2 c~xxx
INTO TABLE gt_itab
FROM tabla1 AS a INNER JOIN tabla2 AS b ON a~reg1 = b~reg1
AND a~reg2 = b~reg2
INNER JOIN tabla3 AS c ON b~aaa1 = c~aaa1
AND b~aaa2 = c~aaa2
WHERE a~nombre_usuario IN s_nombre.

Ahora hay q tener en cuenta tbm los indices de esas 3 tablas, si los indices no ayudan (campos claves) no conviene hacer ese JOIN ... espero te ayude :D

ClaudioC
02/11/09, 11:46:35
Holas, yo lo haria en un solo SELECT, en una tabla interna con estos campos

TYPES: BEGIN OF ty_itab,
reg1 TYPE tabla1-reg1,
reg2 TYPE tabla1-reg2,
reg3 TYPE tabla1-reg3,
reg4 TYPE tabla1-reg4,
aaa1 TYPE tabla2-aaa1,
aaa2 TYPE tabla2-aaa2,
xxx TYPE tabla3-xxx,
END OF ty_itab.

DATA: gt_itab TYPE TABLE OF ty_itab.

START-OF-SELECTION.

SELECT a~reg1 a~reg2 a~reg3 a~reg4 b~aaa1 b~aaa2 c~xxx
INTO TABLE gt_itab
FROM tabla1 AS a INNER JOIN tabla2 AS b ON a~reg1 = b~reg1
AND a~reg2 = b~reg2
INNER JOIN tabla3 AS c ON b~aaa1 = c~aaa1
AND b~aaa2 = c~aaa2
WHERE a~nombre_usuario IN s_nombre.

Ahora hay q tener en cuenta tbm los indices de esas 3 tablas, si los indices no ayudan (campos claves) no conviene hacer ese JOIN ... espero te ayude :D

David, funciono perfecto.
Te agradezco muchisimo la ayuda.
Un abrazo!