Anuncio

Colapsar
No hay anuncio todavía.

Problema con INNER JOIN

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Problema con INNER JOIN

    Saludos, me encuentro creando un programa que solicita al usuario datos desde 5 select-options cuyos datos pertenecen a 2 tablas distintas (EKKO y EKPO). Al momento de hacer la selección de datos hago un select join como el siguiente:

    SELECT ekko-ebeln ekko-aedat ekpo-aedat ekpo-matnr
    ekpo-ebelp ekpo-menge ekpo-peinh ekko-waers ekko-ekgrp
    INTO it_data_output
    FROM ekko
    INNER JOIN ekpo ON ekko-lopnr = ekpo-ebelp
    AND ekko-ebeln = ekpo-ebeln
    WHERE so_ebeln IN ekko-ebeln AND
    so_aedat IN ekpo-aedat AND
    so_lifnr IN ekko-lifnr AND
    so_ekgrp IN ekko-ekgrp AND
    so_ekorg IN ekko-ekorg.

    La verdad no estoy seguro que funcione, soy bastante nuevo en ABAP. El detalle esta en que cuando intento activarlo u/o verificar la sintáxis me dice el siguiente error:

    Field "EKKO-LOPNR" unknown.

    Lo cuál me resulta extraño ya que dicho campo (junto con ekko-ebeln) son keys de la tabla. Cualquier ayuda o sugerencia será muy bien agradecida.

  • #2
    Inner join

    Hola Joseph_g,
    Prueba el select como te lo paso:

    SELECT h~ebeln h~aedat p~aedat p~matnr
    p~ebelp p~menge p~peinh h~waers h~ekgrp
    INTO TABLE it_data_output
    FROM ekko AS h
    INNER JOIN ekpo AS p
    ON h~lponr = p~ebelp AND
    h~ebeln = p~ebeln
    WHERE so_ebeln IN h~ebeln AND
    so_aedat IN h~aedat AND
    so_lifnr IN h~lifnr AND
    so_ekgrp IN h~ekgrp AND
    so_ekorg IN h~ekorg.

    - El campo de la EKKO se llama LPONR (no LOPNR)
    - Cuando utilices un inner join, utiliza los alias en el select (AS) y después referencia los campos con ~

    Espero que te haya ayudado,
    Saludos!
    Marcos.-

    Comentario


    • #3
      Hola marcosf, muchas gracias por la pronta respuesta. Gracias por la información sobre el Alias, ya no da problema pero me daba otro que después de moverle un rato descubrí y lo comento por si a alguién mas le llega a pasar.

      Cuando se hace un SELECT en la sección del WHHERE del lado izquierdo se deben poner los campos de la tabla de donde los estamos sacando y del lado derecho el select-option, parameter, o el dato con el que estamos comparando. Ejemplo erroneo (tal cual lo hacía yo):

      SELECT...
      WHERE so_ebeln IN h~ebeln AND
      so_aedat IN h~aedat AND
      so_lifnr IN h~lifnr AND
      so_ekgrp IN h~ekgrp AND
      so_ekorg IN h~ekorg

      Si lo hacemos así, el select buscará el campo so_ebeln en la tabla interna por lo que no lo encontrará. Lo correcto sería:

      SELECT...
      WHERE
      h~ebeln IN so_ebeln AND
      h~aedat IN so_aedat AND
      h~lifnr IN so_lifnr AND
      h~ekgrp IN so_ekgrp AND
      h~ekorg IN so_ekorg.

      Debo mencionar que mi SELECT aún no regresa datos, tendré que seguir viendo que pasa, pero por lo menos ya no me marca error.

      Comentario


      • #4
        Yo no entiendo por que relacionas ekko y ekpo con el campo LPONR. Ese campo no debes utilizarlo en tu inner join, la relación debería ser solo mediante ebeln.

        Saludos
        "Soy el señor Lobo, arreglo problemas"
        http://sapymas.blogspot.com/

        Comentario

        Trabajando...
        X