Abap 左外部联接不返回任何行
我有两张钥匙相同的桌子。我想,在一次选择中,不需要对内部表中的数据进行后续操作,检索左侧表中没有相应记录的所有记录(即右侧表中的列将为空) 最合乎逻辑的做法是执行以下操作,但这不会编译,因为您可能不会在WHERE子句的外部联接中使用右侧的字段:Abap 左外部联接不返回任何行,abap,opensql,sap-erp,Abap,Opensql,Sap Erp,我有两张钥匙相同的桌子。我想,在一次选择中,不需要对内部表中的数据进行后续操作,检索左侧表中没有相应记录的所有记录(即右侧表中的列将为空) 最合乎逻辑的做法是执行以下操作,但这不会编译,因为您可能不会在WHERE子句的外部联接中使用右侧的字段: select e~equnr into lt_equnr from equi as e left outer join eqbs as b on e~equnr = b~equnr where e~matnr = materi
select e~equnr into lt_equnr
from equi as e
left outer join eqbs as b on e~equnr = b~equnr
where e~matnr = material
and b~b_werk = space.
另一种看起来很有希望并且可以编译的方法是这样的,但它不起作用,因为它甚至会带回那些在右侧表格中有相应条目的条目:
select e~equnr into table lt_equnr
from equi as e
left outer join eqbs as b on e~equnr = b~equnr
and b~b_werk = space
where e~matnr = material.
此选项仅从右侧清空字段,但仍然包括结果集中的所有内容。这可以通过从右侧选择字段来确认
另一个也不起作用的选项是使用子选择:
select e~equnr into table lt_equnr
from equi as e
where e~matnr = material
and e~equnr not in ( select equnr from equi where equnr = e~equnr ).
您可以尝试使用子查询:
SELECT e~equnr INTO TABLE lt_equnr
FROM equi AS e
WHERE e~matnr = material
AND NOT EXISTS ( SELECT b~equnr
FROM eqbs as b
WHERE b~equnr = e~equnr ).
正如在对这个问题的评论中指出的,我的代码中有一个bug。在我的子选择中,我使用的是LHS表。(我的子选择引用的是EQUI而不是EQBS) 通过修复我的子选择,它可以工作:
select e~equnr into table lt_equnr
up to max_entries rows
from equi as e
where e~matnr = material
and e~equnr not in ( select equnr from eqbs where equnr = e~equnr ).
如果字段存在,您可以尝试将材料条件添加到子选择中吗???不,它不是右表中的字段。您的子选择中似乎有错误,这应该是从eqbs中选择的。啊,伙计,我怎么会错过这个?谢谢你指出这一点!当我明天上班的时候,我会看看这是否能解决问题!(在代码上多看一眼总是有帮助的!:-)正如@GertBeukema指出的,我的代码中有一个bug。子选择实际上会起作用。谢谢。正如你从我的问题中看到的,我确实尝试了一个子查询,但正如评论中指出的,我在子查询中使用了主表,所以可能是我这边的一个bug!值得一提的是,这不是一个好的做法。你把计算的负担放在数据库服务器上,而不是应用服务器上,数据库服务器只有一个,而应用服务器的数量实际上是无限的。我知道你说过你不想操纵内部表,但你不应该想要这样。