池表、集群表和投影视图不允许 JOIN:‘BSEG’

JOIN is not allowed for pool tables, cluster tables, and projection views: ‘BSEG’

我正在尝试 select 通过使用 tables BSEG 和 KNBK 的内部连接将 table BKPF 的某些字段转换为另一个 table。代码如下:

SELECT k~bukrs, k~belnr, k~budat, k~gjahr, s~buzei,
       s~kunnr, i~banks, i~bankl, i~bankn
FROM bkpf AS k
INNER JOIN bseg AS s                                "Error
      ON s~bukrs = k~bukrs AND 
         s~belnr = k~belnr AND 
         s~gjahr = k~gjahr
INNER JOIN knbk AS i 
      ON i~kunnr = s~kunnr
INTO TABLE @DATA(lt_data_knbk)
WHERE k~bukrs IN @so_bukrs
  AND k~budat IN @so_budat
  AND k~blart IN @so_blart.

最后三个where条件是select选项。我从激活程序中得到的错误来自粗体行,错误消息是:JOIN is not allowed for pool tables, cluster tables, and projection views: 'BSEG'。

有谁知道,我该如何解决这个问题?

预先感谢您的帮助!

您可以在基于 Hana 的系统上连接不同类型的表。但是你不能对旧系统这样做。您需要使用多个单独的查询并填充所需的值。

BSEG 是一个集群 table,它不能包含在 JOIN 中(如果您不使用 HANA DB,但错误消息说它没有)。为了克服这个问题,必须在单独的步骤中选择 table。在您的情况下,这实际上意味着三个单独的 SELECT,因为 BKPF 不能与 KNBK 连接(没有公共字段)。

所以在这种情况下,最好使用透明的 tables 用于客户发布(BSID 和 BSAD),这些可以包含在 JOIN 中。唯一的缺点是,帖子是分开的: BSID:客户打开的帖子 BSAD:客户清除过帐 因此需要两个单独的 SELECT(取决于具体需要,但这在原始问题中已说明)。

在这种情况下,您可以忘记 BKPF,因为您在代码中实际使用的所有字段都在 BSID/BSAD.

SELECT bsid~bukrs, bsid~belnr, bsid~budat, bsid~gjahr, bsid~buzei,
       bsid~kunnr, knbk~banks, knbk~bankl, knbk~bankn
       FROM bsid
       INNER JOIN knbk
             ON bsid~kunnr EQ knbk~kunnr
       INTO TABLE @DATA(lt_bsid_knbk)
       WHERE bsid~bukrs IN @s_bukrs
         AND bsid~budat IN @s_budat
         AND bsid~blart IN @s_blart. 

由于提示必须重复,BSID 必须替换为 BSAD。