JOIN不允许用于池表、集群表和投影视图:' BSEG '



我试图通过使用表BSEG和KNBK的内部连接来选择表BKPF的一些字段,进入另一个表。代码如下:

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.

最后三个条件是选择选项。我从激活程序中得到的错误来自黑体行,其中错误消息是:JOIN不允许用于池表、集群表和投影视图:' BSEG '。

可能有人知道,我怎么能解决这个问题?

提前感谢您的帮助!

BSEG是一个集群表,它不能被包括在join中(如果您不使用HANA数据库,但错误消息显示,它没有)。为了克服这个问题,必须在单独的步骤中选择表。在您的例子中,这实际上意味着三个单独的select,因为BKPF不能与KNBK连接(没有公共字段)。

因此,在这种情况下,最好为客户发布(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取代。

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

最新更新