与包含 SELECT 的 where 条件的 CDS 关联

问题描述

我有两种看法:

ZC_PurRequisitionFs 和 ZMM_ONAYT005。

从 C_PurRequisitionFs 扩展的第一个视图。

第二个视图从 Z* 表中获取数据。

如何只获取第二个视图中不存在的第一个视图数据?



@AbapCatalog.sqlViewAppendName: 'ZcpuRREQUISFS'
@EndUserText.label: 'Sat belgeleri'
extend view C_PurRequisitionFs with ZC_PurRequisitionFs {
    *
} where ZC_PurRequisitionFs.object_id not in( SELECT * FROM ZMM_ONAYT005 ).



解决方法

虽然 CDS 视图不支持子查询,但它们支持 JOIN。

通常您会使用 JOIN 来仅获取存在于两个表中的那些条目。但是,当您想要表 A 中存在于表 B 中的所有条目时,您可以执行 left outer join,然后仅针对以下条目添加 where 条件右表 is null

define view Z_TEST as select 
from table_a
left outer join table_b on 
    table_a.object_id = table_b.object_id
{
    ... fields....
}
where table_b.object_id is null;
,

据我所知,ABAP CDS 视图不支持子查询,因此您需要将其包含在主查询中。

请检查此guide