SOQL-запрос Salesforce: как использовать SELECT с условием WHERE - PullRequest
0 голосов
/ 22 октября 2018

Для данного запроса SOQL, пытаясь оптимизировать запрос SOQL.У меня есть два запроса

Запрос 1 , чтобы получить ID пользователя из Salesforce для данной учетной записи пользователя

SELECT id From User WHERE Username = 'test@testmail.com'

Запрос 2 для данного идентификатора пользователянайти пользовательские объекты

SELECT Id,Headline__c,Description__c
FROM Incident__c
WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
        WHERE (Incident__r.Account__c = '034524000000uzurX')
        AND Incident__r.Indicator__c = false)

Теперь я хочу оптимизировать его под один запрос, чтобы мне не приходилось делать два вызова API из внешней системы.Поэтому я пытался

SELECT Id,Headline__c,Description__c
FROM Incident__c
WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
        WHERE (Incident__r.Account__c = null OR Incident__r.Account__c IN (SELECT id From User WHERE Username = 'test@testmail.com'))
        AND Incident__r.Indicator__c = false)

Но я получаю следующую ошибку

MALFORMED_QUERY: 
Incident__r.Account__c IN (SELECT id From User WHERE Username = 'test@testmail.com'))
                                          ^
ERROR at Row:5:Column:87
Nesting of semi join sub-selects is not supported

Есть ли лучший способ решить проблему такого типа?Заранее спасибо :)

1 Ответ

0 голосов
/ 23 октября 2018

У вас должна быть возможность использовать функцию SOQL для отслеживания внешних ключей и соблюдения отношения account__c к пользовательской таблице и фильтрации по имени пользователя оттуда, например,

SELECT Id, Headline__c, Description__c
FROM Incident__c
WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
        WHERE (Incident__r.Account__c = null OR 
               Incident__r.Account__r.Username = 'test@testmail.com')
        AND Incident__r.Indicator__c = false)
...