У меня есть собственный объект1 с именем Case_Type_Data__c с Level_1__c, Level_2__c, Level_3__c и у меня есть еще один настраиваемый объект2 с именем ERT_Case_Type__c с теми же полями Level_1__c, Level_2__c, Level_3__c

Пакетные данные скопированы из ERT_Case_Type__c в Case_Type_Data__c

Теперь я пытаюсь написать 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)

Верстак выдает ошибку

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

Обратите внимание: Id для ERT_Case_Type__c и Is для Case_Type_Data__c не совпадает, поэтому не может использовать идентификатор

Предоставьте мне Присоединиться к SOQL , чтобы получить записи, которые не были скопированы из ** ERT_Case_Type__c ** в Case_Type_Data__c

С уважением, Кэролайн

-1
Carolyn Cordeiro 8 Ноя 2020 в 06:32

2 ответа

Лучший ответ

Вы не можете выполнять произвольные объединения в SOQL. Если Level_3__c не является полем Id, вы не можете выполнить объединение этих объектов, как указано в сообщении об ошибке.

Если это поле, скажем, текстовое, вам нужно будет либо извлечь данные из Salesforce и проанализировать их локально, либо написать код Apex для выполнения запросов к двум объектам по отдельности и извлечения необходимых данных. Учитывая ваше заявление о том, что вы изначально использовали Batch Apex, последний подход, вероятно, невозможен из-за объема данных.

2
David Reed 8 Ноя 2020 в 17:27

Это запрос 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, если кто-то ищет ответ

0
Carolyn Cordeiro 9 Ноя 2020 в 19:42