FetchXML等效SQL左连接报错:customeridtype属性不存在求助
Fixing the FetchXML Error for Your LEFT JOIN Query
嘿,我一眼就看出问题出在哪了——你把筛选条件放错地方啦!
你写的FetchXML里,把属于opportunity实体的customeridtype字段放在了account的link-entity的<filter>里,系统自然会去account实体里找这个字段,可不就报错说属性不存在嘛!
你的原SQL语句是在LEFT JOIN的ON子句里同时指定了两个条件:关联字段匹配,以及opportunity的customeridtype = 1。要在FetchXML里还原这个逻辑,你需要在link-entity的筛选条件里明确指定customeridtype属于opportunity实体,而不是默认的account。
下面是修复后的FetchXML代码:
<fetch mapping="logical" version="1.0"> <entity name="opportunity"> <attribute name="opportunityid" /> <link-entity name="account" from="accountid" to="customerid" alias="A1" link-type="outer" > <filter type="and" > <!-- 加上entity="opportunity"指定字段所属主实体 --> <condition entity="opportunity" attribute="customeridtype" operator="eq" value="1" /> </filter> <attribute name="accountid" /> </link-entity> </entity> </fetch>
为什么这样改?
在FetchXML的link-entity中,<filter>里的条件默认是针对关联的子实体(这里是account)的。当你需要引用主实体(opportunity)的字段时,必须通过entity属性明确指定主实体的名称,这样查询引擎才会正确到opportunity里找customeridtype字段。
这样修复后的查询逻辑和你的原SQL完全一致:会返回所有opportunity记录,只有当opportunity的customeridtype等于1且customerid匹配account的accountid时,才会带出对应的accountid;否则accountid会返回null。
内容的提问来源于stack exchange,提问作者Vijay Ande
相关产品推荐
相关产品推荐

