Возможен сложный запрос?

У меня есть 3 таблицы, родительская таблица и 2 дочерние таблицы. Допустим, Mother_c является родителем. Тогда Child_c и Pet_c — это две дочерние таблицы, которые имеют указатель отношения master-detail на Mother_c.

У меня есть идентификатор одной строки из Child_c, я хочу получить все строки из Pet_c, которые соответствуют Mother_c этой единственной строки Child_c.

Мне интересно, возможно ли это в одном запросе SOQL?


person Joe    schedule 19.08.2011    source источник


Ответы (1)


Да, это вполне возможно с полусоединением SOQL. Я проверил это со стандартными объектами CRM, такими как:

SELECT Id,
      (SELECT Id FROM Cases) 
FROM Account 
WHERE Id IN (SELECT AccountId 
             FROM Contact 
             WHERE Id = '0036000000qCwp9'
            )

Чтобы пройти через это, с заданным идентификатором контакта вы сначала находите родительскую учетную запись, а затем возвращаетесь к дочерним обращениям. В вашем примере с настраиваемыми объектами это будет очень похоже, но вместо этого будут использоваться имена пользовательских отношений __r:

SELECT Id,
      (SELECT Id FROM Pet__r) 
FROM Mother__c 
WHERE Id IN (SELECT Mother__c 
             FROM Child__c 
             WHERE Id = '003a000000qCwp9'
            )
person ryanbrainard    schedule 20.08.2011
comment
Спасибо! Я не знал о ключевом слове «IN». - person Joe; 20.08.2011
comment
Я забыл, что они были доступны — одна из сложных частей платформы force.com — не отставать от релизов! - person Matt Lacey; 29.08.2011