В Salesforce связи между объектами определяются с помощью отношений «родитель-потомок», где один объект является родительским, а другой — дочерним. При запросе данных с помощью языка запросов к объектам Salesforce (SOQL) вы можете столкнуться со сценариями, в которых вам необходимо получить родительские записи, у которых нет связанных дочерних записей. В этой статье блога мы рассмотрим различные методы выполнения этой задачи, используя разговорный язык, и предоставим примеры кода для каждого подхода.
Метод 1: использование левого внешнего соединения
Один из способов получения родительских записей без дочерних записей — использование левого внешнего соединения в запросе SOQL. Этот тип соединения возвращает все записи из левого объекта (родительского) и соответствующие записи из правого объекта (дочернего). Чтобы отфильтровать родительские записи без дочерних записей, вы можете включить предложение WHERE, которое проверяет наличие нулевых значений в поле дочерней связи.
List<Account> parentRecords = [SELECT Id, Name
FROM Account
LEFT OUTER JOIN Contacts
WHERE Contacts.Id = null];
Метод 2: использование подзапросов
Другой метод — использовать подзапросы для получения родительских записей, у которых нет связанных дочерних записей. Вы можете создать подзапрос для получения всех дочерних записей, а затем использовать предложение NOT IN, чтобы исключить родительские записи, у которых есть дочерние записи.
List<Account> parentRecords = [SELECT Id, Name
FROM Account
WHERE Id NOT IN (SELECT AccountId
FROM Contact)];
Метод 3: использование преимуществ агрегированных запросов
Агрегированные запросы также можно использовать для получения родительских записей без дочерних записей. Сгруппировав дочерние записи и отфильтровав группы с нулевым числом, вы можете получить нужные родительские записи.
List<Account> parentRecords = [SELECT Id, Name
FROM Account
WHERE Id NOT IN (SELECT AccountId
FROM Contact
GROUP BY AccountId
HAVING COUNT(Id) > 0)];
В этой статье мы рассмотрели три различных метода получения родительских записей без дочерних записей с помощью Salesforce SOQL. Используя левые внешние соединения, подзапросы или агрегатные запросы, вы можете эффективно отфильтровывать родительские записи, у которых нет связанных дочерних записей. В зависимости от вашего конкретного случая использования вы можете выбрать метод, который лучше всего соответствует вашим потребностям.
Не забудьте адаптировать примеры кода к конкретным именам объектов и полей. Приятного кодирования!