此查询可以正确创建从第一个_的版本到固定版本和固定版本的正确创建关系,而不包括固定版本。
现在,我修改了查询以计算创建关系的数量,但是它似乎不正确地创建了关系,甚至涉及固定版本,如下所示:
MATCH (problem:Issue {id: $issueId})
CALL {
WITH problem
MATCH (problem)-[:FIRST_AFFECTED]->(firstVersion:Version)
(()<-[:PREDECESSOR_VERSION]-(nextVersion:Version) WHERE NOT EXISTS { (nextVersion)<-[:FIXED]-(problem) })*
(affectedVersion:Version)
RETURN affectedVersion
UNION
MATCH (problem)-[:FIXED]->(fixedVersion:Version)
(()-[:PREDECESSOR_VERSION]->(upVersion:Version) WHERE NOT EXISTS { (upVersion)<-[:FIRST_AFFECTED | IMPACT | FIXED]-(problem) })*
(affectedVersion:Version)
WHERE affectedVersion <> fixedVersion AND upVersion <> fixedVersion
RETURN affectedVersion
}
WITH problem, affectedVersion
WHERE NOT EXISTS ((problem)-[:IMPACT]->(affectedVersion))
CREATE (problem)-[:IMPACT]->(affectedVersion)
RETURN COUNT(*) as num_of_relationships_created
此查询计算创建的关系数量,但问题是它在创建错误的关系中,甚至在结果中包含固定版本。
可能导致问题,我该如何修复它以正确计数问题节点和受影响的节点之间的关系,不包括固定版本?
i最初尝试运行第一个查询,该查询正确创建了问题节点与受影响版本之间的影响关系,但不包括固定版本。这是预期的行为。
,然后我修改了查询以计算通过添加并创建条款创建的关系数量的数量,期望它仅在尚不存在的情况下创建影响关系,并计算此类关系的数量。 whow,在进行此更改之后,即使包含固定版本,查询也开始创建不正确的关系,这不是预期的行为。我期望查询仅在不包括固定版本的同时在问题和受影响的节点之间建立关系,但是查询似乎并没有按预期过滤关系。当您使用
UNION
子句加入2个子征值的结果时,由一个子查询定义的变量(例如
problem
)与另一个子查询未共享。
因此,您的初始查询中的第二个子查询是定义一个新的未结合节点,该节点可以自由匹配所有满足其其余图案的节点。但是您修改的查询预先定义了呼叫子查询之前的
problem
节点。因此,在那种情况下,两个子Queries使用相同的预定义节点。