概要
上記ツイートの通り、child-to-parentのrelationship queryで五階層上までの情報を取得することが可能であるのに対して、parent-to-childのrelationship queryでは一階層下までの情報しか取得することができません。
この記事では、「商談」を手掛かりに「品目名スケジュール」を取得するというユースケースを手掛かりに、親の情報を基に子を辿っていく方法について解説します。
Bad Example(親から順に回す)
List<Opportunity> oppList =[SELECT id FROM opportunity];
 for(Opportunity opp: oppList){
  List<OpportunityLineItem> oliList = [SELECT id FROM OpportunityLineItem];
  for(OpportunityLineItem oli: oliList){
    List<OpportunityLineItemSchedule> olisList=[SELECT id FROM portunityLineItemSchedule];
    ~
}
}「Too many SOQL queries: 101」エラー(´・ω・`)
Good Example1(子から親を取る形で書く)
SELECT opportunitylineitem.opportunity.id,opportunitylineitem.id,id FROM OpportunityLineItemSchedule;逆転の発想。
WHERE句もopportunitylineitem.opportunity.~などを利用すればどの階層でも絞れちゃうので、これでOK✌
Fairly good example
SELECT id, Opportunity.id,( SELECT id from OpportunityLineItemSchedules) from OpportunityLineItem二層目から親と子を両方取りにいくパターン。
WHERE句の兼ね合い次第ではこれでもOK
