JOIN クエリ
このセクションでは、本製品 によるJOIN のサポート方法に固有の機能と制限について説明します。
可能であれば、本製品 はサーバーサイドでJOIN を試みます。SupportEnhancedSQL をtrue に設定すると、Certinia が処理できないJOIN はクライアントサイドで実行されます。
CData JDBC Driver 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