1

我有两个具有相同键的表。我想在一个 SELECT 中,无需后续操作内部表中的数据,检索左侧表中右侧表中没有对应记录的所有记录(即右侧表中的列将是空的)。

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

2 回答 2

2

正如对该问题的评论中所指出的,我的代码中有一个错误。在我的子选择中,我使用的是 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 ).
于 2013-12-10T06:35:29.733 回答
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 ).
于 2013-12-09T15:39:44.267 回答