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

用法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).
      
      1
    • 子查询:
      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).
      
      2
  • 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).
      

      3

    • 子查询:

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

      4

      "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条件子查询
    5
    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等关键字,更灵活
    6
    "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 ).
    
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值