使用LEFT OUTER JOIN选择行,右侧没有相应的记录

时间:2013-12-09 10:18:05

标签: abap

我有两张表同一把钥匙。我想,在一个SELECT中,没有后续内部表中的数据操作,检索左侧表中右侧表中没有CORRESPONDING记录的所有记录(即来自右边的桌子是空的。)

最合乎逻辑的做法是以下内容,但这不会编译,因为您可能不会在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 ).

2 个答案:

答案 0 :(得分:1)

正如对该问题的评论所指出的那样,我的代码中存在一个错误。在我的子选择中,我使用的是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 ).

答案 1 :(得分:0)

您可以使用子查询来尝试:

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 ).