JOIN クエリ
このセクションでは、本製品 による結合のサポート方法に固有の機能と制限について説明します。可能であれば、CData Excel Add-In for Salesforce はサーバーサイドで結合を試みます。SupportEnhancedSQL をtrue に設定すると、Salesforce が処理できない結合はクライアントサイドで実行されます。 CData Excel Add-In for Salesforce はSalesforce Object Query Language(SOQL)に基づいてサーバーサイドの結合をサポートします。本製品 は、専用のSOQL ではなく標準のSQL 構文をサポートしているため、広範なSQL ツールと簡単に統合できます。Salesforce の結合クエリは、Salesforce オブジェクト間のリレーションに基づいています。
リレーションクエリ
Salesforce のオブジェクトはリレーションを使用してリンクできます。標準のSalesforce オブジェクトには、リレーションが事前定義されています。カスタムオブジェクトに対しては、リレーションを定義できます。
親-子リレーション
Salesforce のリレーションは単方向で、1対多(親-子)タイプと多対1(子-親)タイプがあります。リレーションが単方向なので、テーブルがクエリに含まれる際の順序によってリレーションのトラバースのパスが決まります。
次のクエリは、単純な親-子結合クエリを示します。このクエリは、すべてのアカウント、およびそのアカウントに関連付けられた各連絡先の姓名を返します。
SELECT Contact.FirstName, Account.Name FROM Account, Contact
多態性リレーション
Salesforce のリレーションは、多態性リレーションにすることができます。つまり、フィールドの特定のリレーションは、複数のタイプのエンティティを参照できます。例えば、Task エンティティには、デフォルトでContact またはLead を参照するWho リレーションが含まれています。
次のクエリは、多態性リレーションに基づく結合を示します。Who リレーションでContact を参照しているTask だけを返すには、リレーションのエンティティタイプを指定します:
SELECT Task.Subject, Contact.Name FROM Task, Contact WHERE Contact.Type='Contact'
カスタムリレーション
カスタムリレーションである結合条件を指定できます。次のクエリは、すべてのアカウントレコードの名前と、指定された結合条件に一致するすべての連絡先の名を取得します:
Select Contact.Firstname, Account.Name FROM Account JOIN Contact ON Account.MyCustomColumn__c = Contact.Id
サーバーサイド結合構文
以下で説明する構文を使用して、Salesforce サーバーで処理されるSalesforce オブジェクトに対して結合を実行できます。関連オブジェクトの結合はサーバー上で処理されます。事前定義されたリレーションの利点は、Salesforce のデータを使用して結合を実行する際に結合条件を指定する必要がないことです。条件はすでに、リレーションに基づいて考慮対象となっています。
次のクエリは、組織内のすべての連絡先の名を返し、各連絡先について、その連絡先と関連付けられた親アカウント名を返します。
Select Contact.Firstname, Account.Name FROM Contact, Account
テーブル間に複数のリレーションがある場合は、結合基準を明示的に設定できます。次のクエリは、Accounts とContacts の間のデフォルトの親-子リレーションではなく、結合条件(Account.MyCustomColumn__c とContact.Id)の列によって決定されるカスタムリレーションに基づく一致を検索します:
Select Contact.Firstname, Account.Name FROM Account JOIN Contact ON Account.MyCustomColumn__c = Contact.IdSalesforce は内部結合をサポートします。次のクエリは、営業案件に関連付けられたすべてのアカウントレコードを取得します:
SELECT Account.Id, Account.Name, Account.Fax, Opportunity.AccountId, Opportunity.CloseDate FROM Account INNER JOIN Opportunity ON Account.Id = Opportunity.AccountId次のクエリは、3つのカスタムオブジェクト間の結合を示します。このクエリは、NW_Product__c、NW_Category__c、NW_Suppliers__c の3つのカスタムテーブルを結合し、各テーブルのName フィールドを返します。さらに、NW_Category__c テーブルからの結果は、"Dairy" から始まる名前でフィルタ処理されます。
SELECT A.Name, B.Name, C.Name FROM NW_Product__c as A, NW_Category__c as B, NW_Suppliers__c as C WHERE B.Name LIKE 'Dairy%'