求助:使用单条SOQL查询获取指定活动报名的Contact多对象信息
通过单条SOQL语句实现Event ID关联的联系人信息查询
我有主对象Contact,以及两个关联的junction对象:Contact_Event__c(联系人活动关联)和Company_Affiliation__c(联系人公司关联)。
需求是:传入一个Event ID,获取所有报名该活动的Contact信息,必须返回以下4个字段:
- Contact姓名(来自Contact对象)
- Contact类型(来自Contact对象)
- Contact所属公司(来自
Company_Affiliation__c,仅取Record_Type_Name__c='Business'且Is_Primary__c = true的记录) - 活动名称(来自
Contact_Event__c)
当前通过两步查询实现,但部分活动报名人数超1000,性能表现较差,希望用单条SOQL完成查询。
我尝试过两种思路:
示例1:
SELECT Account_Name__c, Record_Type_Name__c, Is_Primary__c, contact__r.Name__c, Contact__r.Record_Type_Name__c FROM Company_Affiliation__c WHERE Record_Type_Name__c='Business' and Is_Primary__c = true AND Contact__r.Guid__c in (Select Guid from Contact where ...)
示例2:
SELECT Event_Name__c, Contact__r.Guid__c,Contact__r.Name__c,Contact__r.Record_Type_Name__c,(Select Account_Name__c from Company_Affiliation__c Where...) FROM Contact_Event__c WHERE Event__r.CVent_ID__C = '83B88111-15D4-4125-B9A0-F66FE46E26D8'...
已有可行查询但不符合需求(以Contact为主对象):
SELECT Id, Guid__c, name, (SELECT Id, Guid__c, AccountName__c FROM Company_Affiliations__r where Record_Type_Name__c='Business' and Is_Primary__c = true), (SELECT Id, Guid__c,Name, Event_Name__c FROM Contact_Events__r WHERE Event_External_ID__c = 'E2469609-12E1-48C4-ABFF-D617C87D5EC7') FROM Contact WHERE Guid__c = '30303334-4d30-3030-3032-466d4a6c6f00'
需要的是以Event为主对象传入GUID的单SOQL语句。
解决方案
可以通过从Contact_Event__c出发,关联Contact并嵌套查询Company_Affiliation__c的方式实现,语句如下:
SELECT Event_Name__c, Contact__r.Name, Contact__r.Record_Type_Name__c, (SELECT Account_Name__c FROM Contact__r.Company_Affiliations__r WHERE Record_Type_Name__c='Business' AND Is_Primary__c = true LIMIT 1) FROM Contact_Event__c WHERE Event__r.CVent_ID__C = '你的Event GUID'
说明:
- 从
Contact_Event__c直接过滤目标Event的ID,获取所有报名的关联记录 - 通过
Contact__r直接获取Contact的姓名和类型字段 - 嵌套查询
Contact__r.Company_Affiliations__r,筛选出主业务公司信息,加LIMIT 1确保只返回一条主公司记录 - 单SOQL查询减少了多次查询的性能开销,适合大数据量场景
内容的提问来源于stack exchange,提问作者jumpingbunny
相关产品推荐
相关产品推荐

