Не може да LEFT OUTER JOIN три таблици

имам проблем В момента имам три таблици, първата таблица е основната и ако във втората таблица няма запис, напишете и него. Но ако във втората таблица съществува запис, така че от третата таблица да се покаже информацията "dispo".

Искам да използвам три SAP таблици - lagp, lqua и marc. Моята цел е да запиша всички позиции на акции от lagp.

2x LEFT JOIN не работи: „Не може да се сравни с „B~MATNR“. Таблица може да бъде съединена с максимум една друга таблица със знак LEFT OUTER JOIN.

Структура:

TYPES:
  BEGIN OF t_work,
    lgnum TYPE lgnum,
    lgtyp TYPE lgtyp,
    lgpla TYPE lgpla,
    bdatu TYPE lagp_bdatu,
    matnr TYPE matnr,
    verme TYPE lqua_verme,
    meins TYPE meins,
    dispo TYPE dispo,
  END OF t_work.
DATA:
  lt_work TYPE TABLE OF t_work INITIAL SIZE 0,
  ls_work LIKE LINE OF lt_work.

И SQL команда:

SELECT a~lgnum a~lgtyp a~lgpla a~bdatu b~matnr b~verme b~meins c~dispo FROM lagp AS a
   LEFT JOIN lqua AS b ON a~lgnum = b~lgnum AND a~lgtyp = b~lgtyp AND a~lgpla = b~lgpla
  INNER JOIN marc AS c ON b~matnr = c~matnr AND b~werks = c~werks
  INTO TABLE lt_work
   WHERE a~lgnum IN so_lgnum
     AND a~lgtyp IN so_lgtyp
     AND a~skzua EQ space
     AND a~skzue EQ space.

Но като резултат е само една борсова позиция - http://i.stack.imgur.com/1sEEo.png

Можете ли да ми кажете как изглежда SQL кодът?

Благодаря ти


person user1612058    schedule 21.06.2015    source източник


Отговори (2)


Опитвам:

SELECT a~lgnum, a~lgtyp, a~lgpla, a~bdatu, b~matnr, b~verme, b~meins, c~dispo 
   FROM lagp AS a
   LEFT JOIN ( lqua AS b 
               JOIN marc AS c ON b~matnr = c~matnr AND b~werks = c~werks )
          ON a~lgnum = b~lgnum AND a~lgtyp = b~lgtyp AND a~lgpla = b~lgpla 
  INTO TABLE @lt_work
   WHERE a~lgnum IN @so_lgnum
     AND a~lgtyp IN @so_lgtyp
     AND a~skzua EQ @space
     AND a~skzue EQ @space.

Друг вариант би бил да поставите съединението между LQUA и MARC в изглед и да направите външно съединение с изгледа. Или разделете селектирането на MARC и направете това, докато преглеждате данните, намерени с селектиране на LAGP и LQUA.

person Gert Beukema    schedule 22.06.2015

Получих този добре работещ код:

  SELECT ma~matnr ma~mtart ma~ernam ma~ersda ma~laeda
  de~maktx as maktx_de fr~maktx as maktx_fr it~maktx as maktx_it
  FROM mara as ma
  LEFT JOIN MAKT as de ON de~matnr = ma~matnr AND de~spras = 'DE'
  LEFT JOIN MAKT as fr ON fr~matnr = ma~matnr AND fr~spras = 'FR'
  LEFT JOIN MAKT as it ON it~matnr = ma~matnr AND it~spras = 'IT'
  INTO CORRESPONDING FIELDS OF TABLE g_it_material
  WHERE ma~ernam IN so_ERNAM
  AND ma~laeda IN so_LAEDA
  AND ma~matnr IN so_MATNR.

и работи добре. Какво казахте за множество леви съединения?

person inetphantom    schedule 14.08.2015