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