微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 LEFT OUTER JOIN 中为选择选项编写条件?

如何解决如何在 LEFT OUTER JOIN 中为选择选项编写条件?

我有以下代码可以正常工作:

TYPES: BEGIN OF ty_table,matnr TYPE marc-matnr,prodh TYPE mvke-prodh,END OF ty_table. 

DATA: bukrs TYPE mvke-vkorg,matnr TYPE marc-matnr.
DATA gt_table TYPE TABLE OF ty_table.

SELECT-OPTIONS s_bukrs FOR bukrs.
SELECT-OPTIONS s_matnr FOR matnr.

SELECT marc~matnr,mvke~prodh
  FROM ( marc
         LEFT OUTER JOIN mvke
         ON mvke~matnr = marc~matnr )
    INTO TABLE @gt_table[]
       WHERE marc~matnr IN @s_matnr
         AND mvke~vkorg IN @s_bukrs.

我想将 vkorg 条件放在 LEFT OUTER JOIN 中,但它不起作用:

SELECT marc~matnr,mvke~prodh
  FROM ( marc
         LEFT OUTER JOIN mvke
         ON mvke~matnr = marc~matnr
         AND mvke~vkorg IN @s_bukrs ) " <---
    INTO TABLE @gt_table[]
       WHERE marc~matnr IN @s_matnr.

这样做后,我收到以下错误

"@S_BUKRS" is invalid here (due to grammar). contains an invalid character or it is a

如果我写 AND mvke~vkorg = @s_bukrs 它可以工作,但我需要使用 IN

解决方法

您只能在指定 JOIN 条件时使用运算符“=”。将您的条件添加到您的 WHERE 子句中。

SELECT *
  FROM marc
       INNER JOIN mara
               ON mara~matnr = marc~matnr
       LEFT OUTER JOIN mvke
                    ON mvke~matnr = marc~matnr
                   AND mvke~vtweg = @lv_vtweg
  INTO TABLE @gt_table[]
  WHERE marc~matnr IN @s_matnr
    AND mvke~vkorg IN @s_bukrs.
,

我设法让它按照我想要的方式工作:

SELECT marc~matnr,mvke~prodh
  FROM ( marc
         LEFT OUTER JOIN mvke
         ON mvke~matnr = marc~matnr )
    INTO TABLE @gt_table[]
       WHERE marc~matnr IN @s_matnr
         AND ( mvke~vkorg IN @s_bukrs
               OR mvke~vkorg IS NULL ). " <---

通过这种方式,它的作用类似于 LEFT OUTER JOIN,并且还会选择 MVKE 表中没有 PRODH 的 MATNR。

,

您可以在此处找到用例的详细说明 sql-outer-join-overview-and-examples

我在这里添加上面链接的部分

SELECT *
FROM Employee
 LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

enter image description here

我们需要注意Join语句中的表放置位置。目前,我们在左侧有一个 Employee 表,在右侧有一个 Departments 表。

让我们重写查询并交换查询中表的位置。在此查询中,我们将 Department 表放在左侧位置,因此 Left Outer Join 应检查此表的值并在不匹配的情况下返回 NULL 值。

在下面的屏幕截图中,您可以看到 EmpID 11 只有一个 NULL 值。这是因为 EmpID 11 在 Employee 表中不可用。

enter image description here

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。