SOQL改写:从Account对象查询关联Closed阶段商机及空值记录
等效SOQL写法
从Account对象作为主查询发起,通过半连接子查询关联商机对象即可实现等效的账户查询,语句如下:
SELECT Id, Name FROM Account WHERE Id IN ( SELECT AccountId FROM Opportunity WHERE StageName LIKE '%Closed%' )
逻辑说明
- 该语句和原SOQL的有效账户查询逻辑完全一致:会返回所有关联了
Close Won/Close Lost阶段商机的账户ID、账户名称,不会额外过滤Name为null的账户,满足空值返回要求。 - 原从Opportunity发起的查询会返回
AccountId = null的行,这部分数据对应未关联任何账户的闭单商机,本身不属于有效账户数据,且Account表中不存在ID为null的记录,因此从Account作为主对象查询时无法返回这类无对应父实体的行,属于SOQL数据模型的天然限制。如果必须获取这部分空行,只能以Opportunity作为主对象发起查询。
内容的提问来源于stack exchange,提问作者Harsh Verma
相关产品推荐
相关产品推荐

