'INNER JOIN with 'OR' condition?
If have the following coding and the bold marked line is the problem, so it seems to be that's it not possible to use the "OR"-statement within a Inner Join select "ON":
PARAMETERS:
pa_abgrs TYPE vbap-abgrs DEFAULT 'YV0001',
pa_kokrs TYPE kokrs OBLIGATORY DEFAULT '0002',
pa_monat TYPE bis_abgr_m OBLIGATORY,
pa_gjahr TYPE bis_abgr_j OBLIGATORY.
DATA: hlp_datum TYPE sy-datum.
CONSTANTS: comp_nine(20) TYPE c VALUE '09182736455463728190'.
TYPES: BEGIN OF t_tkkaz_tkkar,
kateg TYPE kategorie,
zlnid TYPE dzeilen_id,
koamk TYPE kstar_mask, " Kostenart
zidap TYPE dzeilen_id, " Zeilen-ID akt.pflichtig
zidnf TYPE dzlnid_naf, " Zeilen-ID nicht akt.pfl.
nafpz TYPE naf_prz, " nicht akt.f.%-Satz
END OF t_tkkaz_tkkar.
DATA: lt_tkkaz_tkkar TYPE TABLE OF t_tkkaz_tkkar.
CONCATENATE pa_gjahr pa_gjahr INTO hlp_datum.
TRANSLATE hlp_datum USING comp_nine.
SELECT tkkar~kateg tkkar~zlnid tkkaz~koamk tkkaz~zidap tkkaz~zidnf
tkkaz~nafpz
FROM tkkar
INNER JOIN tkkaz
ON tkkaz~zidnf = tkkar~zlnid
OR tkkaz~zidap = tkkar~zlnid "<==== THIS LINE
INTO TABLE lt_tkkaz_tkkar
WHERE tkkar~kokrs = pa_kokrs
AND tkkar~versa = '000'
AND tkkar~abgsl = pa_abgrs
AND ( tkkar~kateg = 'E'
OR tkkar~kateg = 'K' )
AND tkkaz~kokrs = pa_kokrs
AND tkkaz~versa = '000'
AND tkkaz~abgsl = pa_abgrs.
AND tkkaz~zglab GE hlp_datum.
IF sy-subrc = 0.
cl_demo_output=>display( lt_tkkaz_tkkar )
ENDIf.
Solution 1:[1]
It is not supported in ABAP, use UNION instead. It has the same semantics
SELECT FROM tkkar
FIELDS tkkar~kateg tkkar~zlnid tkkaz~koamk tkkaz~zidap tkkaz~zidnf tkkaz~nafpz
INNER JOIN tkkaz
ON tkkar~zlnid = tkkaz~zidnf
WHERE ...
UNION
SELECT FROM tkkar
FIELDS tkkar~kateg tkkar~zlnid tkkaz~koamk tkkaz~zidap tkkaz~zidnf tkkaz~nafpz
INNER JOIN tkkaz
ON tkkar~zlnid = tkkaz~zidap
Also your query is wrong because you missed the key fields while joining. In fact you don't even need UNION here, you can achieve the same putting OR condition into WHERE clause and keeping the other JOIN fields making it more inclusive:
SELECT tkkar~kateg tkkar~zlnid tkkaz~koamk tkkaz~zidap tkkaz~zidnf tkkaz~nafpz
FROM tkkar
INNER JOIN tkkaz
ON tkkar~kokrs = tkkaz~kokrs
AND tkkar~versa = tkkaz~versa
AND tkkar~abgsl = tkkaz~abgsl
INTO TABLE lt_tkkaz_tkkar
WHERE tkkar~kokrs = pa_kokrs
AND tkkar~versa = '000'
AND tkkar~abgsl = pa_abgrs
AND tkkar~kateg IN ('E','K')
AND tkkaz~zglab GE hlp_datum.
AND ( tkkar~zlnid = tkkaz~zidnf OR tkkar~zlnid = tkkaz~zidap ).
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Suncatcher |
