SOQL のサブクエリ

SOQL では、条件中にサブクエリを使用して親オブジェクトと子オブジェクトの関連を確認することができます。以下は、条件中でのサブクエリの例です。

例えば、取引先責任者(Contact)オブジェクトの中で、関連するアカウント(Account)が「Gold」プランに属するものを取得する場合:

SELECT Id, FirstName, LastName FROM Contact WHERE Account.Plan__c = 'Gold'

この例では、Account.Plan__c がサブクエリとなり、条件中で関連するアカウントのプランが “Gold” である取引先責任者を取得しています。

もう一つの例として、アカウント(Account)オブジェクトの中で、関連する取引先責任者(Contact)が「主要な連絡先」にマークされているものを取得する場合:

SELECT Id, Name FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE IsPrimaryContact = true)

この例では、アカウントの条件中で Id IN (SELECT AccountId FROM Contact WHERE IsPrimaryContact = true) を使用して、関連する取引先責任者が主要な連絡先になっているアカウントを取得しています。

これらは基本的な例であり、実際のデータモデルや関連によっては、より複雑なクエリを構築する必要があります。サブクエリを使用する際は、データモデルとクエリのパフォーマンスに留意することが重要です。

カスタムオブジェクトのサブクエリ

カスタムオブジェクトでも、標準オブジェクトと同様に SOQL サブクエリを使用して関連するデータをクエリすることができます。以下は、カスタムオブジェクトに対するサブクエリの例です。

例えば、カスタムオブジェクト “CustomObjectc” とその子オブジェクト “ChildObjectc” の関連データを取得する場合:

SELECT Id, Name, (SELECT Id, ChildField__c FROM ChildObjects__r) FROM CustomObject__c

このクエリでは、CustomObject__c の各レコードに関連する ChildObject__c オブジェクトのサブクエリが含まれています。ChildObjects__r は関連名であり、実際の関連名はデータモデルに基づいて決まります。

また、条件を追加してカスタムオブジェクトの特定のデータを絞り込むことも可能です。例えば、特定の条件を持つ子オブジェクトを持つカスタムオブジェクトのデータを取得する場合:

SELECT Id, Name, (SELECT Id, ChildField__c FROM ChildObjects__r WHERE ChildField__c = 'SomeValue') FROM CustomObject__c

このクエリでは、ChildField__c フィールドが ‘SomeValue’ である子オブジェクトを持つ CustomObject__c レコードを取得しています。

SOQL サブクエリは、標準オブジェクトとカスタムオブジェクトの双方で同様に使用できます。