#salesforce #soql
#salesforce #soql
Вопрос:
У меня возникли некоторые проблемы с фильтрацией моего запроса SOQL по дате, где поле даты принадлежит дочернему объекту, который я запрашиваю.
Я ничего не смог найти в документации и попробовал два разных запроса, оба из которых завершились неудачей:
SELECT Name, (SELECT Date__c FROM Child__r)
FROM Parent Where Date__c >= <todays_date>
SELECT Name, (SELECT Date__c FROM Child__r)
FROM Parent Where Child__r.Date__c >= <todays_date>
Возможно ли это вообще в Salesforce?
Ответ №1:
Из вашего вопроса не совсем ясно, что именно вы пытаетесь отфильтровать. Но если вы хотите получить список родителей, у которых есть дочерняя запись с датой, соответствующей некоторым критериям, тогда вы можете использовать полусоединение, например
select name from parent where
id in (select parentId from child where date__c > :today)
Вы также можете добавить дочерний подзапрос, если вам также нужны дочерние данные, например
select name, (select someChildFields from child__r) from parent where
id in (select parentId from child where date__c > :today)
Это даст вам родительский элемент, у которого есть дочерний элемент с критериями, и для каждого родительского элемента получите все дочерние элементы. Вы также можете отфильтровать подзапрос по тем же критериям, если вам нужны только дочерние элементы, соответствующие критериям, например
select name, (select someChildFields from child__r where date__c > :today)
from parent where id in (select parentId from child where date__c > :today)
Наконец, в зависимости от того, что именно вы пытаетесь сделать, вы также можете перевернуть его и запросить дочернюю таблицу напрямую, извлекая данные из родительской записи, например
select childFields, parent__r.name from child where date__C > :today
Комментарии:
1. Спасибо! Второй запрос был тем, что я искал. По сути, я хотел отобразить список родительских объектов на основе диапазона дат (поле даты находится в дочернем объекте).