Ver la Versión Completa : Duda con consulta SQL en abap
Hola a todos.
Queria saber si el sql de abap soporta los conjuntos. Es decir, si hay alguna manera de hacer la siguiente consulta
select *
from tabla_A
where tabla-campo not in ( select campo
from tabla_B )
Muchas gracias a todos
gugutin
13/01/09, 14:54:02
Hola,
select *
from tabla_A
where tabla-campo not in ( select campo
from tabla_B )
Yo creo que si pones un ranges para campo tabla_b y lo llenas previamente,
RANGES: RNG_campo FOR tabla_b-campo.
RNG_campo-SIGN = 'E'
RNG_campo-OPTION = 'EQ'.
RNG_campo-LOW = tabla_b-campo.
RNG_campo-HIGH = SPACE.
APPEND RNG_campo.
luego la instruccion seria
select * from tabla_A
where tabla-campo in RNG_campo.
No estoy seguro si es esta tu pregunta, espero haberte podido ayudar.
Saludos
melerogalan
13/01/09, 16:58:34
Una posible solución evitando sentencias negativas en los SELECTs, seria.
Seleccionar todos los registros de la TABLA A.
SELECT * FROM TABLA A
INTO TABLE I_TABA
Con esta tabla accedemos a la TABLA B.
SELECT * FROM TABLA B
INTO TABLE I_TABB
FOR ALL ENTRIES IN I_TABA
WHERE campo = I_TABA-campo
Recorremos la TABLA A y eliminamos los registros que esten en la TABLA B.
LOOP AT I_TABA.
L_TABIX = SY-TABIX.
READ TABLE I_TABB WITH KEY campo = I_TABA-campo
IF sy-subrc EQ 0. "Esta en la tabla B
* Borramos el registro de la I_TABA.
DELETE I_TABA INDEX L_TABIX.
ENDIF.
ENDLOOP.
En la TABLA A tenemos los registros que no esta en la TABLA B.
Creo que es esto lo que buscas.
Gracias a los dos.
En cuanto a la primera solución no me vale porqué con el rango me coge todos los valores comprendidos entre el mayor y el menor y yo no necesito todos sino unos cuantos dentro de ese rango.
La segunda solución es la que he pensado yo lo q pasa que quería ver la forma de realizarlo en una única consulta SQL y no tener que hacer loops a tablas internas.
Muchas gracias de nuevo
bisonye
14/01/09, 06:17:46
Gracias a los dos.
En cuanto a la primera solución no me vale porqué con el rango me coge todos los valores comprendidos entre el mayor y el menor y yo no necesito todos sino unos cuantos dentro de ese rango.
La segunda solución es la que he pensado yo lo q pasa que quería ver la forma de realizarlo en una única consulta SQL y no tener que hacer loops a tablas internas.
Muchas gracias de nuevo
En un rango puedes indicarle valores individuales, rangos, excluir valores individuales, exluir rangos, mayor, menor, etc, etc.
Revisa los campos Sign y Option.
Saludos
melerogalan
14/01/09, 07:16:38
Gracias a los dos.
En cuanto a la primera solución no me vale porqué con el rango me coge todos los valores comprendidos entre el mayor y el menor y yo no necesito todos sino unos cuantos dentro de ese rango.
La segunda solución es la que he pensado yo lo q pasa que quería ver la forma de realizarlo en una única consulta SQL y no tener que hacer loops a tablas internas.
Muchas gracias de nuevo
Por eficiencia es mejor hacer un loops simple a una tabla interna que utilizar rangos con sentencias negativas. Hay que evitar los accesos a Base de datos lo máximo posible porque es lo que mas recursos consume.
Saludos.
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web