FetchXML中的左外连接具有多个条件

时间:2018-03-08 00:56:47

标签: sql dynamics-crm fetchxml

我正在尝试在具有多个条件的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子句中。

问题

任何人都可以确认发生了什么,以及可能的解决方案吗?

1 个答案:

答案 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

Read more