我正在尝试在具有多个条件的FetchXML中进行左外连接。
这是我正在努力实现的近似SQL:
SELECT incident.*, externalCheck.*
FROM incident
LEFT OUTER JOIN externalCheck
ON externalCheck.incidentId = incident.incidentId
AND externalCheck.checkType = 1
AND externalCheck.isLatest = 1;
注意:这应该始终返回1:1关系,因为我们的业务逻辑要求每个 checkType 只有一个 isLatest 。
这是我的FetchXML:
<entity name="incident">
<all-attributes />
<link-entity name="externalCheck" from="incidentId" to="incidentId" link-type="outer">
<filter type="and">
<condition attribute="checkType" operator="eq" value="1" />
<condition attribute="isLatest" operator="eq" value="1" />
</filter>
<all-attributes />
</link-entity>
</entity>
问题
问题是没有返回连接的右侧为空(即没有 externalCheck 记录)的事件记录,而在左外连接中,我希望即使连接的右侧为空,事件记录仍会返回。
我怀疑FetchXML是将我的过滤器转换为WHERE子句,而不是将条件添加到ON子句中。
问题
任何人都可以确认发生了什么,以及可能的解决方案吗?
答案 0 :(得分:0)
你的怀疑是正确的。但是你可以在某种程度上克服它。
Fetchxml非常灵活&amp;下面的代码片段将给出带有多个子句的左外连接的结果。
<entity name="incident">
<all-attributes />
<link-entity name="externalCheck" alias="ext" from="incidentId" to="incidentId" link-type="outer">
<filter type="and">
<condition attribute="checkType" operator="eq" value="1" />
<condition attribute="isLatest" operator="eq" value="1" />
</filter>
</link-entity>
<filter>
<condition entityname="ext" attribute="externalCheckid" operator= "null" />
</filter>
</entity>
真正的问题在于externalCheck.*
,您无法获得相关的实体属性。必须从<all-attributes />
节点中删除link-entity
。