リレーションクエリの使用
SOQL を使用して、複数のリレーション種別を照会できます。
SOQL を使用して次のリレーションのクエリを行うことが可能です。
- 子-親リレーションのクエリを行ってください (多対一の場合が多くなります)。SELECT、FROM、または WHERE 句内で、ドット (.) 演算子を使用して、これらのリレーションを直接指定してください。
次に例を示します。
1SELECT Id, Name, Account.Name 2FROM Contact 3WHERE Account.Industry = 'media'このクエリは、関連付けられた取引先の業種が「メディア」である取引先責任者に関してのみ、ID と名前を返し、そして返された各取引先責任者に関しては取引先名を返します。
- 親-子のクエリを行ってください (それはほとんど常に一対多です)。サブクエリ内の FROM 句の初期のメンバーが外部クエリ FROM 句の初期のメンバーの場合、サブクエリ (括弧で囲まれた) を使用して、これらのリレーションを指定してください。標準オブジェクトのサブクエリでは、オブジェクトの複数形の名前が各オブジェクトのリレーション名であるため、複数形の名前を指定する必要があります。
次に例を示します。
1SELECT Name, 2 ( 3 SELECT LastName 4 FROM Contacts 5 ) 6FROM Accountクエリはすべての取引先に関して名前を返します。そして各取引先に関しては、取引先責任者の姓を返します。
- 集計クエリ内の外部キーとして親-子リレーションをトラバースします。
次に例を示します。
1SELECT Name, 2 ( 3 SELECT CreatedBy.Name 4 FROM Notes 5 ) 6FROM Accountこのクエリは組織内の取引先を返します。そして、(結果セットが空でない場合) メモを作成したユーザ名と一緒に、取引先に関して、取引先の名前、それらの取引先用のメモを返します (メモがない場合、空の結果セットの可能性があります)。
- 同様の例で、集計クエリ内の親-子リレーションをトラバースします。
1SELECT Amount, Id, Name, 2 ( 3 SELECT Quantity, ListPrice, 4 PricebookEntry.UnitPrice, PricebookEntry.Name 5 FROM OpportunityLineItems 6 ) 7FROM Opportunity同じクエリを使用して、(項目のデータを示す) 商品群を指定することによって、Product2 の値を得ることができます。
1SELECT Amount, Id, Name, (SELECT Quantity, ListPrice, 2 PriceBookEntry.UnitPrice, PricebookEntry.Name, 3 PricebookEntry.product2.Family FROM OpportunityLineItems) 4 FROM Opportunity - クエリ (サブクエリを含む) には WHERE 句を含めることができます。WHERE 句は、現在のクエリの FROM 句のオブジェクトに適用されます。これらの句は親リレーション経由で、現在の範囲 (クエリのルート要素から到達可能) のどのようなオブジェクト上でも絞り込みを行うことが可能です。
次に例を示します。
1SELECT Name, 2 ( 3 SELECT LastName 4 FROM Contacts 5 WHERE CreatedBy.Alias = 'x') 6 FROM Account WHERE Industry = 'media'このクエリは、業種がメディアであるすべての取引先の名前を返し、返された取引先ごとに、作成者の別名が「x」のすべての取引先責任者の姓を返します。