Duda con consulta SQL en abap

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • uo4396
    Member
    • ago
    • 90

    #1

    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
    Member
    • jul
    • 71

    #2
    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

    Comentario

    • melerogalan
      Senior Member
      • nov
      • 142

      #3
      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.
      Cada vez que un programador hace una hora extra, Dios mata a un gatito...tenlo en cuenta

      Comentario

      • uo4396
        Member
        • ago
        • 90

        #4
        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

        Comentario

        • bisonye
          Senior Member
          • ago
          • 635

          #5
          Originalmente publicado por uo4396
          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
          http://sapymas.blogspot.com/

          Comentario

          • melerogalan
            Senior Member
            • nov
            • 142

            #6
            Originalmente publicado por uo4396
            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.
            Cada vez que un programador hace una hora extra, Dios mata a un gatito...tenlo en cuenta

            Comentario

            Trabajando...