首页 > 解决方案 > 加入返回意外的空结果

问题描述

我希望你能帮助我。

Ι 有2个表(例如T1,T2):

T1 和 T2 分别包含 2 和 3 行:

T1:             T2:
   ID MAKTX        ID TABNAME FIELDNAME FIELDVALUE
   -- -----        -- ------- --------- ----------
   1  text1        1  X       MATNR     MATNR1
   2  text2        2  X       WERKS     WERKS2
                   2  X       LGORT     LGORT2

SQL 代码应输出以下内容:

ID1 MAKTX ID2 TABNAME FIELDNAME FIELDVALUE
--- ----- --- ------- --------- ----------
1   text1 1   X       MATNR     MATNR1
2   text2 2   X       WERKS     WERKS2

在我尝试的代码下方:

    ir_id    = VALUE #( ).
    ir_matnr = VALUE #( sign = 'I' option = 'EQ' ( low = 'MATNR1' ) ).
    ir_werks = VALUE #( sign = 'I' option = 'EQ' ( low = 'WERKS2' ) ).
    SELECT *
        FROM T1
        JOIN T2 on T1~id = T2~id
        INTO CORRESPONDING FIELDS OF table <et_result>
        WHERE T1~id IN ir_id[]
        AND   ( T2~fieldname = 'MATNR' AND T2~fieldvalue IN ir_matnr[] )
        AND   ( T2~fieldname = 'WERKS' AND T2~fieldvalue IN ir_werks[] )

T1 和 T2 具有不同的结构,但共享相同的 ID。

我的问题是它什么也不返回。我不知道如何解决这个问题。

PS我不是这个系统的创造者,不能对其进行任何结构上的改变,只是试图解决这个问题。

任何帮助,将不胜感激。

标签: sqljoinabapopensql

解决方案


一个字段不能同时有两个不同的值(MATNR 和 WERKS),所以 AND 条件必须改为 OR:

SELECT *
    FROM T1
    JOIN T2 on T1~id = T2~id
    INTO CORRESPONDING FIELDS OF table <et_result>
    WHERE T1~id IN ir_id[]
    AND  ( ( T2~fieldname = 'MATNR' AND T2~fieldvalue IN ir_matnr[] )
    OR     ( T2~fieldname = 'WERKS' AND T2~fieldvalue IN ir_werks[] ) ).

推荐阅读