JOIN クエリ
このセクションでは、本製品 によるJOIN のサポート方法に固有の機能と制限について説明します。
可能であれば、本製品 はサーバーサイドでJOIN を試みます。SupportEnhancedSQL をtrue に設定すると、Salesforce が処理できないJOIN はクライアントサイドで実行されます。
CData ADO.NET Provider for Salesforce はSalesforce Object Query Language(SOQL)に基づいてサーバーサイドのJOIN をサポートします。本製品 は、専用のSOQL ではなく標準のSQL 構文をサポートしているため、広範なSQL ツールと簡単に統合できます。Salesforce のJOIN クエリは、Salesforce オブジェクト間のリレーションに基づいています。
リレーションクエリ
Salesforce のオブジェクトはリレーションを使用してリンクできます。標準のSalesforce オブジェクトには、リレーションが事前定義されています。カスタムオブジェクトに対しては、リレーションを定義できます。
親-子リレーション
Salesforce のリレーションは単方向で、1対多(親-子)タイプと多対1(子-親)タイプがあります。リレーションが単方向なので、テーブルがクエリに含まれる際の順序によってリレーションのトラバースのパスが決まります。
次のクエリは、単純な親-子JOIN クエリを示します。このクエリは、すべての取引先、およびその取引先に関連付けられた各取引先責任者の姓名を返します。
SELECT Contact.FirstName, Account.Name FROM Account LEFT JOIN Contact ON Account.Id = Contact.AccountId
多態性リレーション
Salesforce のリレーションは、多態性リレーションにすることができます。つまり、フィールドの特定のリレーションは、複数のタイプのエンティティを参照できます。例えば、ToDo エンティティには、デフォルトで取引先責任者またはリードを参照するWho リレーションが含まれています。
次のクエリは、多態性リレーションに基づくJOIN を示します。このクエリは、取引先責任者に関連するすべての取引先責任者とToDo 情報を返します。
SELECT Task.Subject, Contact.Name FROM Contact LEFT JOIN Task ON Task.WhoId = Contact.Id
カスタムリレーション
カスタムリレーションであるJOIN 条件を指定できます。次のクエリは、すべての取引先レコードの名前と、指定されたJOIN 条件に一致するすべての取引先責任者の名を取得します:
SELECT Contact.Firstname, Account.Name FROM Account JOIN Contact ON Account.MyCustomColumn__c = Contact.Id
サーバーサイドJOIN 構文
本製品 は内部的にSalesforce オブジェクトのリレーションを分析し、できるだけ多くのSQL JOIN を処理してSalesforce リレーションクエリに変換することでより高速で優れたパフォーマンスを実現しようとします。
以下で説明する構文を使用して、Salesforce サーバーで処理されるSalesforce オブジェクトに対してJOIN を実行できます。
次のクエリは、組織内のすべての取引先責任者の名を返し、各取引先責任者について、その取引先責任者と関連付けられた親取引先名を返します。
SELECT Contact.Firstname, Account.Name FROM Contact LEFT JOIN Account ON Contact.AccountId = Account.Id
Salesforce はINNER JOIN をサポートします。次のクエリは、商談に関連付けられたすべての取引先レコードを取得します:
SELECT Account.Id, Account.Name, Account.Fax, Opportunity.AccountId, Opportunity.CloseDate FROM Account INNER JOIN Opportunity ON Account.Id = Opportunity.AccountId