前述のように、タスクのWhoIdフィールドとWhatIdフィールドはポリモーフィックです(つまり、複数のターゲットオブジェクトを指すことができます。@ eyescreamで説明されているように、SOQLポリモーフィズム機能を有効にしていない限り、クエリできる「関連」フィールドは次のとおりです。 'Name' APIオブジェクトにあるものですが、このドキュメントに記載されている例外があります。
例1:select Who.FirstName, Who.LastName, Who.Email from Task
Contact / Leadにこれらのフィールドが入力されている場合、これはFirstNameとLastNameのデータを返しますが、上記のドキュメントにあるように、Whoフィールドの2つの可能なターゲットオブジェクト(Contact、リード)がUserオブジェクトです。
例2:select Owner.Name, Owner.Email from Case
Caseオブジェクトでキューを使用している場合、Caseの所有者はユーザーまたはグループ(キューはタイプ)レコードのいずれかです。NameとEmailは両方ともNameオブジェクト上にあるため、上記のクエリは常にNameのデータを返し、ターゲットオブジェクトがUserの場合は、Owner.Emailのデータを返します。
例3:select What.Name, WhatId from Task where What.Type in ('Case','Account','Solution')
これは非常に興味深い例です。Caseオブジェクトの「Name」フィールドは実際CaseNumberにはNameではなく、「non-standard」(ironic)Nameフィールドを持つ他の標準オブジェクトがいくつかあります(SolutionTitleなど)。のような名前フィールドすらありませんCampaignMember。ただし、ポリモーフィックフィールドが技術的にNameオブジェクトを指しているSalesforceの優れた点の1つは、上記のクエリがCasesの結果を返すことです。ケースのCaseNumberが00001234の場合、上記のクエリのWhat.Nameは00001234を返しますが、アカウントの場合はアカウントの名前を返し、ソリューションの場合はSolutionTitleを返します。
ここで、オブジェクトの特別なフィールドである「タイプ」フィールドでフィルタリングすることにより、返されるターゲットオブジェクトを制限できることにも注意してくださいName。