Salesforce Summer '24 から、SOQL で最大 5 レベル下の子レコードまでクエリできるようになりました。これにより、より深い階層の関連オブジェクトを 1 回のクエリで取得できます。
具体的な SOQL の例
たとえば、Account
を親オブジェクトとして、以下のような関連を持つデータ構造があるとします。
-
Account (親)
-
Contact (子)
-
Case (孫)
-
CaseComment (ひ孫)
- FeedItem (5レベル目)
-
CaseComment (ひ孫)
-
Case (孫)
-
Contact (子)
この 5 階層のデータを 1 回の SOQL で取得するには、以下のように記述できます。
SELECT Id, Name,
(SELECT Id, FirstName, LastName,
(SELECT Id, Subject, Status,
(SELECT Id, CommentBody,
(SELECT Id, Body FROM FeedItems)
FROM CaseComments)
FROM Cases)
FROM Contacts)
FROM Account
クエリの解説
-
Account
の ID と Name を取得 -
Contact
をサブクエリで取得(Contacts
関連リスト) -
Case
を 2 階層目のサブクエリで取得(Cases
関連リスト) -
CaseComment
を 3 階層目のサブクエリで取得(CaseComments
関連リスト) -
FeedItem
を 4 階層目のサブクエリで取得(FeedItems
関連リスト)
ポイント
- これまでは 1 回のクエリで 1〜2 階層程度が一般的だったが、5 階層まで一度に取得できるようになった。
- 複数回のクエリ実行や Apex での後処理を減らし、パフォーマンスを向上させることができる。
-
FROM
句のオブジェクトの子オブジェクトはSELECT (サブクエリ) FROM [子オブジェクトのリレーション名]
の形式で記述する。
この機能により、データの取得がより柔軟になり、SOQL クエリの記述が簡潔になります。