ABAP:具有元组的IN(子选择)

时间:2018-10-24 13:03:03

标签: sql abap opensql

此abap代码有效:

  select *
   into table <sub_result>
  from ADRC
  WHERE ADDRNUMBER
  in ( select ADRNRA from AUFK where (cond_string) )
  .

但这不是:

  select *
   into table <sub_result>
  from ADRC
  WHERE (ADDRNUMBER, MANDT)
  in ( select ADRNRA, MANDT from AUFK where (cond_string) )
  .

AFAIK元组语法(ADDRNUMBER, MANDT)是有效的SQL。

这在ABAP的Open SQL中无效吗?

如果不允许使用元组语法,该怎么办?

更新

在Open SQL(仅SAP / ABAP)中,不需要检查MANDT / CLIENT列。这由ABAP完成,ABAP解析Open SQL并创建本机SQL。您使用特定的客户端登录到SAP并自动添加“ WHERE MANDT = THE_ID_YOU_USED_DURING_LOGIN”。这意味着我的初始用例更加简单(“ WHERE COL IN(子选择)”中的一列)。但是,尽管如此,一般性问题仍然有效。非常感谢大家对我的帮助!

2 个答案:

答案 0 :(得分:4)

不能用于多列。尝试这样:

<script>
  document.getElementById('role').value = '<?= memRole; ?>'
</script>

答案 1 :(得分:3)

要完成Pelin的回答,以下是两种可能的语法,具体取决于ABAP版本:

DATA sflights TYPE TABLE OF sflight.

" Strict mode of OpenSQL (>= 7.40 SP 5 ; more syntaxes than old OpenSQL syntax)

SELECT * FROM sflight AS f INTO TABLE @sflights  " <== @ activates the strict mode
  WHERE NOT EXISTS ( SELECT 1 FROM sbook AS b    " <== 1 is possible in strict mode
        WHERE b~carrid = f~carrid
          AND b~connid = f~connid
          AND b~fldate = f~fldate ).

" "Loose" mode of OpenSQL (strict mode not used)

SELECT * FROM sflight AS f INTO TABLE sflights " <== no @ i.e. strict mode deactivated
  WHERE NOT EXISTS ( SELECT * FROM sbook AS b  " <== 1 is not possible
        WHERE b~carrid = f~carrid
          AND b~connid = f~connid
          AND b~fldate = f~fldate ).