2015-12-02 59 views
0

我有這個圖:的Cypher查詢不返回所有預期的節點

A<-B->C 

B是一個很小的樹的根。恰好有A和B之間的一個關係,和B和C.

當我運行以下之間的一個,則返回一個節點。爲什麼這個Cypher查詢不返回A和C節點?

MATCH(a {name:"A"})<-[]-(rewt)-[]->(c) RETURN c 

這似乎是該查詢的上半年會發現的根,而下半年會發現兩個子節點。

直到幾分鐘前,我還以爲它在邏輯上等同於以下查詢其作品。有什麼不同?

MATCH (a {name:"A"})<-[]-(rewt) 
MATCH (rewt)-[]->(c) 
RETURN c 

編輯cybersam

我已經抽象我的數據庫,所以我們可以討論我的具體問題。現在,我們仍然有一個微小的樹,但也有4個節點是根的孩子。(很抱歉,這是不同的,但我發展,不想改變我的環境太多。)

這查詢返回的所有4:

match(a)<-[]-(b:ROOT)-[]->(c) return c 

他們中的一個有 「DDDD」 的名字......

match(a {name"dddd"})<-[]-(b:ROOT)-[]->(c) return c 

此查詢僅返回它們的。不包括「dddd」。我的天啊。

要回答cybersam的具體問題,這個查詢:

MATCH (a {name:"dddd"})<--(rewt:CODE_ROOT) 
MATCH (rewt)-->(c) 
RETURN a = c; 

返回四行。該值是true, false, false, false

回答

2

[已更新]

你的2個查詢是有區別的。 A MATCH子句將過濾掉所有重複的關係。

因此,你的第一個查詢將過濾掉所有的比賽,其中左側的關係是一樣的右側關係:

MATCH(a {name:"A"})<--(rewt)-->(c) 
RETURN c; 

你的第二個查詢將允許2間的關係是一樣的,由於關係是由2項獨立MATCH條款發現:

MATCH (a {name:"A"})<--(rewt) 
MATCH (rewt)-->(c) 
RETURN c; 

如果我是正確的,那麼下面的查詢應返回N行(其中N是傳出relationsh數量從rewt IPS)和僅一個值應該是true

MATCH (a {name:"A"})<--(rewt) 
MATCH (rewt)-->(c) 
RETURN a = c; 
+0

感謝您的答覆。你能澄清你最後一句話嗎?你的意思是關於第一個查詢嗎? –

+0

是的。我已經更新了我的答案,並且可以執行查詢來查看我是否正確。 – cybersam

+0

OP已更新。你似乎是部分正確的。 –

0

兩個工作對我蠻好。我試過2.3.0社區。 你介意發佈你的CREATE命令嗎?