Abap 左外部联接不返回任何行

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

我有两张钥匙相同的桌子。我想,在一次选择中,不需要对内部表中的数据进行后续操作,检索左侧表中没有相应记录的所有记录(即右侧表中的列将为空)

最合乎逻辑的做法是执行以下操作,但这不会编译,因为您可能不会在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 = 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!值得一提的是,这不是一个好的做法。你把计算的负担放在数据库服务器上,而不是应用服务器上,数据库服务器只有一个,而应用服务器的数量实际上是无限的。我知道你说过你不想操纵内部表,但你不应该想要这样。