subquery - FOR ALL ENTRIES 中的嵌套子查询

标签 subquery abap opensql

顾问给我发送了这个代码示例,这是他希望得到的东西

SELECT m1~vbeln_im m1~vbelp_im m1~mblnr smbln      
    INTO CORRESPONDING FIELDS OF TABLE lt_mseg
    FROM mseg AS m1
    INNER JOIN mseg AS m2 ON m1~mblnr = m2~smbln
                         AND m1~mjahr = m2~sjahr
                         AND m1~zeile = m2~smblp
    FOR ALL ENTRIES IN lt_vbfa
    WHERE 
      AND m2~bwart = '102'
      AND 0 = ( select SUM( ( CASE
        when SHKZG = 'S' THEN 1
        when SHKZG = 'H' THEN -1
        else 0
        END ) *MENGE ) MENGE
        into lt_mseg-summ
        from mseg
        where
        VBELN_IM = m1~vbeln_im
        and VBELP_IM = m1~vbelp_im
        ).

问题是我不知道在当前语法中应该如何工作。我考虑派生内部选择并将其用作主选择的条件,但是有没有正确的方法来编写这种嵌套结构?

据我所知,如果嵌套语句 = 0,则执行主查询。这里的问题是嵌套语句中的 case。在ABAP中甚至可能吗?在我看来,这个检查可以在主 SQL 查询之外使用。

欢迎任何建议。

最佳答案

您得到的逻辑是 Native/Open SQL 的一部分,并且有一些您需要注意的缺点。

  • 您显示的语句必须放在 EXEC SQL 和 ENDEXEC 之间。
  • 逻辑是平台相关的。
  • EXEC 和 ENDEXEC 之间没有执行语法检查
  • 执行此操作绕过数据库缓冲过程,因此速度较慢

  • 对我来说,我会研究一种更好的方法来捕获在开放/ native sql 之外性能更好的数据。

    如果您想推进这种类型的逻辑,下面有几个链接应该会有所帮助。有一个使用带有 case 语句的嵌套选择的示例选择。
    Test Program
    Example Logic

    关于subquery - FOR ALL ENTRIES 中的嵌套子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36148811/

    相关文章:

    MYSQL:如何找到对应于coSTLy函数的MIN()的条目

    abap - 在 SELECT 语句中重新使用内部表之前是否需要清除它?

    oop - 如何将填充结构/表定义为 ABAP 对象中的类常量

    abap - 如何学习SAP ERP(不买)?

    sql - 使用 subselect 从另一个表更新一个表

    mysql - 来自多个子查询 MYSQL 的 View

    mysql - 子查询的SQL问题

    loops - ABAP 中的 SELECT FOR ALL ENTRIES 与 LOOP SELECT SINGLE

    abap - OpenSQL 中 GROUP BY 子句中的通配符?

    abap - Pragma 隐藏警告 : the field used in the where condition may contain null values