我正在使用 soql 查询来获取任务。我的要求是获取所有与帐户或联系人对象相关的任务。帐户或联系人对象中的其他字段也很少,无论对象相关。有没有一种简单的方法来代替编写多个查询。
3 回答
下次请提供更具体的信息。一般来说,您可以通过引用名称后跟一个点来引用父对象。这是一个例子
Select Account.Name, AccountId From Task Where Account.Name = 'John'
这里 Account 是引用的名称(来自任务),AccountId 是引用字段。
你的问题有点不清楚。您是否正在寻找与任何帐户或联系人相关或与特定帐户或联系人相关的所有任务?
如果是前者,试试
选择 ID、主题、 从任务 在哪里 What.Type = '帐户' 或 Who.Type = '联系方式'
如果是后者,请使用IN :list
Moti 已经建议的语法。与What.Type
相比,它是有用的AccountId!=null
,因为它不会返回与例如机会相关的任务(如果你想要这种行为,如果你将所有联系人与机会相关联,请使用AccountId!=null
并可能删除,因为它是多余的)。Who.Type
无论哪种情况,您的问题都是从 CONTACT whos 中提取特定数据,因为多态字段仅允许访问有限数量的字段。现在似乎找不到该列表。我不相信旧的 SOQL 支持在一个查询中执行此操作的那种语法——这就是 SOQL 多态性如此成功的原因——尽管我可能是错的。
现在,如果您有可用的SOQL TYPEOF ,您应该能够做一些更有趣的事情,例如:
选择 ID、主题、 类型什么 WHEN Account THEN AccountNumber 结尾, 类型谁 WHEN 联系 THEN 名字 结尾 从任务 在哪里 What.Type = '帐户' 或 Who.Type = '联系方式'
怎么样
select {column list] from task where parentid in (select id from account where ...) or parentid in (select id from contact where ...)
或者,如果您在 Apex 中并且已经在列表中拥有联系人或帐户 ID(我们将使用 idList),您可以使用:
从 :idList 中 parentid 的任务中选择 {column list]