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