IT人材をお探しの方は、まずはお電話ください。担当営業がすぐにご要望にマッチした人材をご提案いたします。
tel:03-6409-6766 お急ぎの方はお電話ください

ブログTOP > IT・技術関連 > SalesforceのSOQLサブクエリを活用して、複雑なクエリを作成する方法

SalesforceのSOQLサブクエリを活用して、複雑なクエリを作成する方法

IT・技術関連 更新日:2024.09.05
エンジニア採用
SalesforceのSOQLサブクエリを活用して、複雑なクエリを作成する方法

SalesforceのSOQLによるリレーションクエリとサブクエリ

SalesforceのSOQLのリレーションクエリとサブクエリを利用して、オブジェクト間の親-子のリレーションまたは子-親のリレーションを横断して、結果を絞りこむことができます。 リレーションクエリは、標準オブジェクトとカスタムオブジェクトでクエリを実行すると呼ばれる構文です。一度に複数のオブジェクト種別へのクエリを実行できます。 例えば、リレーションクエリでは、ある種別のオブジェクトから、別の種別のオブジェクトに適用される条件による絞りこみができます。この場合の“別の種別のオブジェクトに適用される条件”がサブクエリになります。

SalesforceのSOQLのサブクエリに比較演算子を含める

SalesforceのSOQL クエリのSELECT ステートメントでは、WHERE 句の項目式に比較演算子を含むことができます。これにより、準結合と反結合のクエリを作成できます。

SOQLのサブクエリに使用できる比較演算子の例

SalesforceのSOQLのサブクエリで使用できる、比較演算子を紹介します。 比較演算子は、条件に合致する場合に決められた式を返します。文字列を比較する場合、大文字と小文字が区別される一意の項目だけで、大文字と小文字が区別されます。それ以外の項目では、大文字と小文字は区別されません。 ・=(Equals) 条件:fieldName の値が式の value に一致する。 式:true ・!=(Not equals) 条件:f ieldName の値が指定した value に一致しない 式:true ・<(Less than) 条件:fieldName の値が指定した value より小さい。 式:true ・>(Greater than) 条件:fieldName の値が指定した value より大きい。 式:true ・IN(IN) 条件:値が WHERE 句の値のいずれかに等しい。 式:true ・LIKE(Like) 式:true 条件:fieldName の値が指定した value のテキスト文字列の文字に一致する。 式:true

SalesforceのSOQLサブクエリの活用例 準結合と反結合

 SalesforceのSOQLでは、サブクエリのINやNOT IN 句内の値リストを置き換えることにより、主キーであるID項目、もしくは外部キーである参照項目による絞り込みを行えます。これらは準結合、反結合と呼ばれ、返されるレコードを制限します。 準結合:IN 句の別のオブジェクトのサブクエリ 反結合:NOT IN 句の別のオブジェクトのサブクエリ ここでは、SOQLクエリのIN を使用して、準結合と反結合の活用例を紹介します。INでは、値のセットを、同じオブジェクトの別の項目で指定されている項目の値を参照できます。サンプルを紹介します。

SELECT Name FROM Account
WHERE BillingState IN ('Sample1', ' Sample2') 

SalesforceのSOQLサブクエリの活用例① ID 項目による絞りこみ

SOQLサブクエリでのID項目による絞り込みでは、親-子の準結合もしくは反結合を作成できます。ここでは、Account(親)とOpportunity (子)を例に挙げて説明します。

SOQLサブクエリのID 項目の準結合

SOQLサブクエリのID 項目による準結合の活用例を紹介します。WHERE 句に準結合を含みます。 このサンプルは、関連づけられている商談(Opportunity)が不成立となっている取引先 ID を返します。サブクエリは、比較対象の項目と同じ種別の項目を返します。IN 句の左にあるオペランド IdがID 項目をさしています。

SELECT Id, Name
FROM Account
WHERE Id IN
  ( SELECT AccountId
    FROM Opportunity
    WHERE StageName = 'Closed Lost' 

SOQLサブクエリのID 項目の反結合

SOQLサブクエリのID 項目による反結合の活用例として、進行中の商談がないすべての取引先の取引先 ID を返す、反結合のサンプルを紹介します。

SELECT Id
FROM Account
WHERE Id NOT IN
  (
    SELECT AccountId
    FROM Opportunity
    WHERE IsClosed = false
  ) 

SalesforceのSOQLサブクエリの活用例② 参照項目による絞りこみ

参照項目による絞りこみでは、子-子および子-親のリレーションに対して、それぞれ準結合と反結合を作れます。 下の例のように、Contact(子)もしくはOpportunity(子)とAccount(親)だけでなく、Contact(子)とOpportunity(子)のような子と子の間でも作成できます。 ・子-子の準結合もしくは反結合 例)Contact と Opportunity ・子-親の準結合もしくは反結合 例)Opportunity と Account

SOQLサブクエリの参照項目の準結合

SOQLサブクエリの参照項目による準結合の活用例として、Sample1に該当する取引先責任者の ToDo ID を返す、サンプルを紹介します。 IN 句の左にあるオペランド WhoId が参照項目をさします。WhoId により、取引先責任者もしくはリードを参照できるため多態的な参照項目になりますが、参照結果はサブクエリによって取引先責任者に制限されます。

SELECT Id
FROM Task
WHERE WhoId IN
  (
    SELECT Id
    FROM Contact
    WHERE MailingCity = 'Sample1'
  ) 

SOQLサブクエリの参照項目の反結合

SOQLサブクエリの参照項目による反結合の例として、Opportunity(子)とContact(子)の反結合のサンプルを消化します。 このサンプルでは、供給元が Webを除く取引先責任者の商談 ID すべてを返します。

SELECT Id
FROM Opportunity
WHERE AccountId NOT IN
  (
    SELECT AccountId
    FROM Contact
    WHERE LeadSource = 'Web'
  ) 

SalesforceのSOQLサブクエリを活用しよう

今回は、SalesforceのSOQLのサブクエリについて説明しました。 SOQLのサブクエリを使用して、Salesforceのオブジェクトを横断してクエリすることができます。 ここで紹介したのはごく一部の例です。SOQLのサブクエリを活用しましょう。

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニアAWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。

・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
ITエンジニアの派遣を利用したい企業様へ
ITエンジニアを派遣で採用したい企業様へ
  • 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
  • すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!

当社のITエンジニア派遣サービスは

  • 派遣スピードが速い!(最短即日)
  • 4,500名のエンジニアから貴社にマッチした人材を派遣
  • 正社員雇用も可能

こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。

無料相談のお申し込みはこちら
IT・技術関連の記事一覧へ

カテゴリから記事を探す

すべての記事一覧へ