如何为具有相同字段 Level_1__c、Level_2__c、Level_3__c 的 2 个自定义对象编写 SOQL

How to Write SOQL for 2 custom objects which have same fields Level_1__c, Level_2__c,Level_3__c

我有一个名为 Case_Type_Data__c 的自定义对象,其中包含字段 Level_1__c、Level_2__c、Level_3__c 我有另一个名为 ERT_Case_Type__c 的自定义对象,具有相同的字段 Level_1__c、Level_2__c、Level_3__c

我把数据从ERT_Case_Type__c批量复制到Case_Type_Data__c

当我尝试在 workbench 中编写 SOQL 以找出哪些记录没有被复制时,例如:

Select Level_1__c,Level_2__c,Level_3__c From Case_Type_Data__c Where Level_3__c NOT IN (Select Level_3__c From ERT_Case_Type__c)

Workbench 抛出错误:

MALFORMED_QUERY: semi join sub selects can only query id fields, cannot use: 'Level_3__c'

请注意 ERT_Case_Type__c 的 Id 和 Case_Type_Data__c 的 Id 不匹配,因此我不能使用 Id.

我正在寻找一种方法 加入 SOQL 以获取未从 **ERT_Case_Type__c **复制到 的记录Case_Type_Data__c

此致, 卡罗琳

您不能在 SOQL 中执行任意联接。如果 Level_3__c 不是 Id 字段,则无法执行跨这些对象的联接,如错误消息所述。

如果此字段是文本字段,您需要从 Salesforce 中提取数据并在本地进行分析,或者编写 Apex 代码分别对两个对象执行查询并提取数据需要。鉴于您最初使用 Batch Apex 的声明,由于数据量,后一种方法可能不可行。

这是查询select case__c, createddate, level_1__c, level_2__C, lEVEL_3__C from ert_case_type__c where createddate >= 2020-11-09T00:30:26.467-08:00 and case__c NOT IN (select case__C from case_type__C) order by createddate如果有人在寻找答案