SAP opensql子查询的使用示例(WHERE NOT EXISTS 或 WHERE EXISTS)
  RdEelXhuDp09 2023年12月07日 20 0


用法1:WHERE NOT EXISTS 或 WHERE EXISTS

  • WHERE EXISTS:查询结果包含任意一个子查询结果集则返回真;否则假
  • 子查询:
SELECT *
  FROM marc AS a
  INTO TABLE lt_data
  WHERE EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND ( werks = '1001' OR werks = '9001' ) )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc).
  • 子查询:
SELECT *
  FROM marc AS a
  INTO TABLE lt_data
  WHERE EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND werks = '9001' )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc).
  • WHERE NOT EXISTS:查询结果包含任意一个子查询结果集则返回假;否则真
  • 子查询:
SELECT *
  FROM marc AS a
  INTO TABLE lt_data
  WHERE NOT EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND ( werks = '1001' OR werks = '9001' ) )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc).

SAP opensql子查询的使用示例(WHERE NOT EXISTS 或 WHERE EXISTS)_结果集

  • 子查询:
SELECT *
  FROM marc AS a
  INTO TABLE lt_data
  WHERE NOT EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND werks = '9001' )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc).

SAP opensql子查询的使用示例(WHERE NOT EXISTS 或 WHERE EXISTS)_子查询_02

"WHERE EXISTS
SELECT *
  FROM marc AS a
  WHERE EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND ( werks = '1001' OR werks = '9001' ) )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc).

cl_demo_output=>display( lt_marc ).

"WHERE NOT EXISTS
SELECT *
  FROM marc AS a
  WHERE NOT EXISTS ( SELECT * FROM marc WHERE matnr = '10000312' AND ( werks = '1001' OR werks = '9001' ) )
  AND matnr = '10000312'
  ORDER BY matnr,werks
  INTO TABLE @DATA(lt_marc1).

cl_demo_output=>display( lt_marc1 ).

用法2:WHERE子查询

  • WHERE条件子查询
SELECT *
  FROM marc AS a
  WHERE matnr IN ( SELECT matnr FROM mara WHERE matnr IN ( '000000500210003177','000000500210003178' ) )
  AND werks IN ( SELECT werks FROM marc WHERE matnr IN ( '000000500210003177','000000500210003178' ) )
  INTO TABLE @DATA(lt_marc).

cl_demo_output=>display( lt_marc ).

用法3:WITH + AS(高级用法)

  • WITH + AS语法可使用UNION等关键字,更灵活
"WITH + 子查询语法
WITH +tmp_tab_name AS ( SELECT matnr,werks
FROM marc
WHERE matnr = '10000312' )

SELECT b~*
FROM +tmp_tab_name AS a
INNER JOIN marc AS b
  ON a~matnr = b~matnr AND a~werks = b~werks
WHERE b~werks IN ( '1001','1003' )
ORDER BY b~matnr,b~werks
INTO TABLE @DATA(lt_marc).

cl_demo_output=>display( lt_marc ).


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
RdEelXhuDp09