2016-03-28 143 views
0

我有一个下面的查询(第一个简化的显示问题)可选的比赛没有返回预期的结果

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

写可选的查询(第二个)

OPTIONAL MATCH (recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)-[:Reference{Id:'F09'}]-(recIncidents_F08_F09:RecordIncidents) WHERE (recIncidents_F08_F09.F01="Trojan") RETURN recEmployee union OPTIONAL MATCH (recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer) WHERE (recComputer_F08.F02="WS-MRSPFRY02")

与不幸的是不同的路径或者只与工会长期研究后的正确方式。

0

[EDITED]

这不是一个错误。从2个因素的行为结果:

  • MATCHOPTIONAL MATCH条款将过滤掉重复关系,并
  • OPTIONAL MATCH具有包含涉及2个特定节点之间的关系完全相同的子模式的多种模式。

子模式(recEmployee:RecordEmployee)-[:Reference{Id:'F08'}]-(recComputer_F08:RecordComputer)在单个OPTIONAL MATCH内以2个模式重复。由于模式的第一个实例发现的任何Reference关系也将在第二个实例中找到,neo4j将过滤掉所有结果行。这就是为什么你的第一个查询没有结果。

您需要避免在同一个MATCHOPTIONAL MATCH子句中的多个模式中重复相同的子模式(涉及相同2个节点之间的相同关系类型)。

+0

1.我不能,这是简化的查询完整查询有一个或子句,查找计算机名称。所以这两个可选路径应该在那里。 2.删除重复项并不能解释全部删除。在哪种情况下,不同的(1,1)返回null? – Dmitriy

+0

1.为什么你必须在同一个查询中重复相同的子模式?我不明白你的意思。 – cybersam

+0

我将查询添加到原始文章,它解释它。它在底部。 – Dmitriy