2016-03-28 151 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