¿Negar PARA TODAS LAS ENTRADAS en la consulta SELECCIONAR?

Quiero obtener esos registros de una tabla transparente que no existen en la itab PARA TODAS LAS ENTRADAS.

Mientras que la lógica predeterminada es incluir las entradas que existen en la tabla interna, quiero excluirlas. Quiero algún tipo de declaración PARA TODAS LAS ENTRADAS NO IN.

¿Hay algún trabajo alrededor?

preguntado el 12 de junio de 12 a las 19:06

La respuesta depende de la cantidad de entradas que deben excluirse, ¿estamos hablando de decenas, centenas, miles, decenas de miles, más? -

Creo que hay (diez) mil entradas. -

Por favor mira "¿Las preguntas deben incluir" etiquetas "en sus títulos?", donde el consenso es "¡no, no deberían"! -

3 Respuestas

Bueno, después de 8 años de inactividad, puedo proponer una posible solución para mi problema.

Desde el lanzamiento 7.52 ABAP permite poner itab como fuente de datos para la declaración SELECT, por lo que la tarea anterior se puede simplificar para agregar la subconsulta NOT EXISTS con FOR ALL ENTRIES itab como fuente de datos:

Ejemplo de codificación:

* filling FOR ALL ENTRIES table
SELECT *
  FROM spfli
  INTO TABLE @DATA(lt_exclude_FAE)
 WHERE carrid = s~carrid AND
       connid = s~connid AND
     cityfrom = 'NEW YORK'

* excluding FAE rows
SELECT *
   FROM sflight AS s
   WHERE seatsocc < s~seatsmax AND
     NOT EXISTS ( SELECT  *
                    FROM @lt_exclude_FAE AS exclude
                   WHERE carrid = s~carrid AND
                         connid = s~connid AND
                       cityfrom = s~cityfrom )
   INTO TABLE @DATA(flights_wo_ny).

Sin embargo, ahora esto seguramente solo funciona en la base de datos de HANA, y tal vez en un par de otros.

Respondido el 31 de enero de 20 a las 10:01

Con la restricción de que "Esta declaración no se puede ejecutar en todos los sistemas de bases de datos". HANA permite esta función. - Sandra Rossi

Gracias, Sandra, corrigió la respuesta. No tengo 7.52 ahora, así que no puedo probar, solo fue una suposición aproximada. ¿Puede por favor vincular a alguna documentación? Es interesante leer la explicación - Atrapasol

El texto que menciono proviene de la documentación que vinculó (y hay más información aquí). Tengo 7.52 y pude probarlo en HANA 2.0 con éxito, tal vez otras bases de datos lo soporten, pero falla al menos con Sybase ASE 16.0. Tenga en cuenta que puede probar si la base de datos tiene la función: IF cl_abap_dbfeatures=>use_features( EXPORTING requested_features = VALUE #( ( cl_abap_dbfeatures=>itabs_in_from_clause ) ) ). - Sandra Rossi

Gracias, probaré en otras bases de datos cuando tenga la oportunidad. Atrapasol

No creo que sea posible. Usaría rangos para eso. Si esto no es adecuado, se puede usar loop+read table.

Respondido el 12 de junio de 12 a las 21:06

Puede usar Consulta simple para este problema.

Revisa esta codificación...

TABLES : table1 , table2 .

DATA : it_table1 TYPE STANDARD TABLE OF table1 ,
   it_table2 TYPE STANDARD TABLE OF table2 ,
   wa_table1 TYPE table1 ,
   wa_table2 TYPE table2 .


 SELECT * FROM table1 INTO CORRESPONDING FIELDS OF TABLE it_table1 .


 LOOP AT it_table1 INTO wa_table1 .

        SELECT field1 FROM table2 INTO CORRESPONDING FIELDS OF TABLE it_table2 WHERE field2 = wa_table1-field1 .

    IF  sy-subrc = 0 .
        delete TABLE it_table1 FROM wa_table1 .
    ENDIF.

ENDLOOP.

Respondido el 13 de junio de 12 a las 14:06

Solución de trabajo, pero no realmente eficiente. - Atrapasol

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.