我有一个以下查询(第一个简化以显示问题)
OPTIONAL MATCH (recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)-[:Reference{Id:'F09'}]-(recIncidents_F08_F09:RecordIncidents),
(recEmployee:RecordEmployee),
(recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)
WHERE ( recIncidents_F08_F09.F01="Trojan" )
RETURN recEmployee
它不会返回任何内容。 如果我删除第三个可选匹配,那么它工作正常。这是一个错误吗?我认为这意味着可选。
OPTIONAL MATCH (recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)-[:Reference{Id:'F09'}]-(recIncidents_F08_F09:RecordIncidents),
(recEmployee:RecordEmployee)
WHERE ( recIncidents_F08_F09.F01="Trojan" )
RETURN recEmployee
好吧,我不想混淆这个问题,但当然人们开始谈论重复的路径,什么不是。我认为可选匹配不返回任何内容的事实是一个错误,也许有人有解决方法。这是一个完整的查询,它在返回2个节点时不返回任何内容。
OPTIONAL MATCH (recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)-[:Reference{Id:'F09'}]-(recIncidents_F08_F09:RecordIncidents),
(recEmployee:RecordEmployee),
(recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)
WHERE ( recIncidents_F08_F09.F01="Trojan" ) OR (recComputer_F08.F02="WSMYSTATION")
RETURN recEmployee
答案 0 :(得分:0)
[EDITED]
这不是错误。该行为来自两个因素:
MATCH
或OPTIONAL MATCH
子句将过滤掉重复的关系,OPTIONAL MATCH
有多种模式,其中包含涉及2个特定节点之间关系的完全相同的子模式。子模式(recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)
在单个OPTIONAL MATCH
内以2种模式重复。由于第二个实例也会找到第一个模式实例找到的任何Reference
关系,neo4j将过滤掉所有结果行。这就是您的第一个查询没有结果的原因。
您需要避免在同一MATCH
或OPTIONAL MATCH
子句中的多个模式中重复相同的子模式(在相同的2个节点之间涉及相同的关系类型)。