リレーションクエリの使用
子-親リレーションの照会
子-親リレーション (多くの場合、多対一) を照会する場合は、ドット (.) 演算子を使用します。SELECT 句、FROM 句、または WHERE 句内で、これらのリレーションを直接指定してください。
1SELECT Id, Name, Account.Name
2FROM Contact
3WHERE Account.Industry = 'media'このクエリは、関連付けられた取引先の業種が「メディア」である取引先責任者に関してのみ、ID と名前を返し、そして返された各取引先責任者に関しては取引先名を返します。
親-子リレーションの照会
親-子リレーション (多くの場合は一対多) を照会する場合は、括弧で囲まれたサブクエリを使用します。サブクエリ内の FROM 句の初期メンバーが外部クエリの FROM 句の初期メンバーである場合、サブクエリ内でこれらのリレーションを指定してください。標準オブジェクトのサブクエリでは、リレーション名は子オブジェクトの複数形の名前になります。
API バージョン 58.0 以降では、SOQL のクエリに最大 5 レベルの親-子リレーションを含めることができます。5 レベルの親-子リレーションを照会する機能は、標準およびカスタムオブジェクトに対する REST および SOAP クエリコールを介した SOQL クエリでのみ使用できます。
各リレーションで、親はクエリの第 1 レベルと見なされ、子リレーションは親ルートから最大 4 レベルの深さになります。SOQL クエリに 6 レベル以上の親-子リレーションが含まれると、エラーが発生します。
この SOQL クエリの例には、5 レベルの親-子リレーションが含まれています。
1SELECT Name,
2 (SELECT LastName,
3 (SELECT AssetLevel,
4 (SELECT Description,
5 (SELECT LineItemNumber FROM WorkOrderLineItems)
6 FROM WorkOrders)
7 FROM Assets)
8 FROM Contacts)
9FROM Accountサブクエリに WHERE 句を含めると、クエリの親ルートから到達できる現在の範囲内の任意のオブジェクトで、親リレーション経由で絞り込みが実行されます。
このクエリの例では、業種がメディアであるすべての取引先の名前が返されます。返された取引先ごとに、作成者の別名が「x」のすべての取引先責任者の姓が返されます。
1SELECT Name,
2 (
3 SELECT LastName
4 FROM Contacts
5 WHERE CreatedBy.Alias = 'x')
6 FROM Account WHERE Industry = 'media'親-子リレーションをトラバースする SOQL クエリのバージョン管理された動作については、「リレーションクエリ制限について」を参照してください。
リレーションクエリのトラバース
親-子リレーションと子-親リレーションの両方をトラバースするリレーションクエリの例をいくつかご紹介します。
この例のクエリでは、組織のすべての取引先の名前が返されます。また取引先ごとに、取引先の各メモを作成したユーザの名前が返されます。取引先のメモがない場合は、結果セットには何も含まれません。
1SELECT Name,
2 (
3 SELECT CreatedBy.Name
4 FROM Notes
5 )
6FROM Account以下は、親-子リレーションと子-親リレーションをトラバースするもう 1 つのクエリの例です。
1SELECT Amount, Id, Name, (SELECT Quantity, ListPrice,
2 PriceBookEntry.UnitPrice, PricebookEntry.Name,
3 PricebookEntry.product2.Family FROM OpportunityLineItems)
4 FROM Opportunity