在 ABAP 7.02 中左连接 2 个表
Left join on 2 tables in ABAP 7.02
我想加入 4 个表 T001、KNKK、KNB1 和 KNA1,以获取来自 KNB1/KNA1 的所有客户及其在 KNKK 中的风险类别。
我们需要来自 KNKK 的左连接,但连接条件基于 2 个表:T001-KKBER 和 KNA1-KUNNR。
但是我得到语法错误:
Unable to compare with "T001~KKBER". A table can be joined with a maximum of one other table using LEFT OUTER JOIN.
select是:
SELECT knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
INTO TABLE git_kunnr_tab
FROM kna1
INNER JOIN knb1
ON kna1~kunnr EQ knb1~kunnr
INNER JOIN t001
ON knb1~bukrs EQ t001~bukrs
LEFT JOIN knkk
ON knb1~kunnr EQ knkk~kunnr AND
t001~kkber EQ knkk~kkber
WHERE knb1~kunnr IN s_kunnr
AND knb1~bukrs = p_bukrs.
我们的系统是旧的ECC6 7.02,不能实现ABAP的新特性。
1select有什么办法可以做到吗?
不确定,你得到了什么错误,但这在语法上是正确的:
SELECT ...
INTO TABLE ...
FROM kna1
INNER JOIN knb1
ON kna1~kunnr EQ knb1~kunnr
INNER JOIN t001
ON knb1~bukrs EQ t001~bukrs
LEFT JOIN knkk
ON knb1~kunnr EQ knkk~kunnr AND
t001~kkber EQ knkk~kkber
WHERE ...
我认为无法对所有这些表和 select 来自 KNA1 的所有客户进行联接,即使他们不存在于 KNKK 中也是如此。
也许 SubQuery 有办法,但我现在想不起来了。
所以我制作了 2 个 selects 并填充了 2 个 ITAB,然后我循环使用 KUNNR & CTLPC 并通过传递 CTLPC 值修改第二个。所以现在的代码是:
select knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
knb1~fdgrv knb1~frgrp
into table git_kunnr_tab
from knb1 as knb1 left join kna1 as kna1
on knb1~kunnr = kna1~kunnr
where knb1~kunnr in s_kunnr
and knb1~bukrs = p_bukrs.
select knkk~kunnr knkk~ctlpc into table lit_kunnr_risk
from knkk as knkk inner join t001 as t001
on knkk~kkber = t001~kkber
where t001~bukrs = p_bukrs and
knkk~ctlpc <> ''.
sort git_kunnr_tab by kunnr.
loop at lit_kunnr_risk into lwa_kunnr_risk.
gwa_kunnr_tab-ctlpc = lwa_kunnr_risk-ctlpc.
modify git_kunnr_tab from gwa_kunnr_tab transporting ctlpc
where kunnr = lwa_kunnr_risk-kunnr.
clear gwa_kunnr_tab.
endloop.
如果有更好的方法,请post。
我想加入 4 个表 T001、KNKK、KNB1 和 KNA1,以获取来自 KNB1/KNA1 的所有客户及其在 KNKK 中的风险类别。
我们需要来自 KNKK 的左连接,但连接条件基于 2 个表:T001-KKBER 和 KNA1-KUNNR。
但是我得到语法错误:
Unable to compare with "T001~KKBER". A table can be joined with a maximum of one other table using LEFT OUTER JOIN.
select是:
SELECT knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
INTO TABLE git_kunnr_tab
FROM kna1
INNER JOIN knb1
ON kna1~kunnr EQ knb1~kunnr
INNER JOIN t001
ON knb1~bukrs EQ t001~bukrs
LEFT JOIN knkk
ON knb1~kunnr EQ knkk~kunnr AND
t001~kkber EQ knkk~kkber
WHERE knb1~kunnr IN s_kunnr
AND knb1~bukrs = p_bukrs.
我们的系统是旧的ECC6 7.02,不能实现ABAP的新特性。
1select有什么办法可以做到吗?
不确定,你得到了什么错误,但这在语法上是正确的:
SELECT ...
INTO TABLE ...
FROM kna1
INNER JOIN knb1
ON kna1~kunnr EQ knb1~kunnr
INNER JOIN t001
ON knb1~bukrs EQ t001~bukrs
LEFT JOIN knkk
ON knb1~kunnr EQ knkk~kunnr AND
t001~kkber EQ knkk~kkber
WHERE ...
我认为无法对所有这些表和 select 来自 KNA1 的所有客户进行联接,即使他们不存在于 KNKK 中也是如此。
也许 SubQuery 有办法,但我现在想不起来了。
所以我制作了 2 个 selects 并填充了 2 个 ITAB,然后我循环使用 KUNNR & CTLPC 并通过传递 CTLPC 值修改第二个。所以现在的代码是:
select knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
knb1~fdgrv knb1~frgrp
into table git_kunnr_tab
from knb1 as knb1 left join kna1 as kna1
on knb1~kunnr = kna1~kunnr
where knb1~kunnr in s_kunnr
and knb1~bukrs = p_bukrs.
select knkk~kunnr knkk~ctlpc into table lit_kunnr_risk
from knkk as knkk inner join t001 as t001
on knkk~kkber = t001~kkber
where t001~bukrs = p_bukrs and
knkk~ctlpc <> ''.
sort git_kunnr_tab by kunnr.
loop at lit_kunnr_risk into lwa_kunnr_risk.
gwa_kunnr_tab-ctlpc = lwa_kunnr_risk-ctlpc.
modify git_kunnr_tab from gwa_kunnr_tab transporting ctlpc
where kunnr = lwa_kunnr_risk-kunnr.
clear gwa_kunnr_tab.
endloop.
如果有更好的方法,请post。