こんにちは、管理人の@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の取得結果を用いて、親に対して、クエリ
以上
終わりに
リファレンス
サブクエリ/リレーションクエリの記事なら →→→ リレーションクエリ