Memos About Salesforce

Salesforceにハマってたこと!

Salesforceのサブクエリの使用 子レコードを持つ親レコードの取得 王道クエリ

f:id:jude2016:20200203170305p:plain
サブクエリ子レコードを持つ親レコードの取得

こんにちは、管理人の@Salesforce.Zです。

掲題のように、子レコードを持つ親レコードを取得するクエリがほしい、なんとなく、できるようになった。

しかし、サブクエリで、条件として使えない時があり、そんな例外はどうするか、悩みがある

読んだら得ること

★ 子レコードを持つ親レコードの取得するクエリ
★ 例外の場合のクエリ

目次

サブクエリ

サンプル

SELECT Name,
  (
    SELECT LastName
    FROM Contacts
    WHERE CreatedBy.Alias = 'x') 
 FROM Account WHERE Industry = 'media'

子レコードを持つ親レコードの取得

通常は下記のクエリで、取得できるが、例外がある

SELECT Id, Name FROM Parent__c WHERE Id IN (SELECT ParentId__c FROM Child__c )

例外

下記のオブジェクトはサブクエリの条件として使えない * ActivityHistory * Attachments * Event * EventAttendee * Note * OpenActivity * Tags (AccountTag, ContactTag, and all other tag objects) * Task

ダメな例:コンパイルエラーになる(Entity 'Task/Event ....' is not supported for semi join inner selects)

SELECT Id, Name FROM Parent__c WHERE Id IN (SELECT ParentId__c FROM Task);

SELECT Id, Name FROM Parent__c WHERE Id IN (SELECT ParentId__c FROM Event)

例外の対策

カスタマイズでやるしかないでしょう

対策アルゴリズム

1.子に対して、クエリ(取得項目は親の項目) 2.#1の取得結果を用いて、親に対して、クエリ

以上

終わりに

リファレンス

サブクエリ/リレーションクエリの記事なら →→→ リレーションクエリ

SOQLのサブクエリの使用