2014-04-20 54 views
1

我有2個節點讓2型「學生」的說和「類」獲取Neo4j的節點的屬性與可選的關係像左連接

Student have {id, name}. 
Class have {id, name}. 

學生可以有類節點可選關係,「參加」 。

(s:Student)-[r:ATTENDS]->(c:Class). 

[r:ATTENDS] - Optional relationship. (present or may not present) 

我希望學生記錄,因爲它是所有的屬性。如果存在關係,那麼class_name將與當前的「Class」節點匹配,否則class_name將爲null。

{student_id,student_name,class_name} 

我試圖通過密碼查詢,但沒有得到結果。請幫忙。

OPTIONAL MATCH (s:Student)-[:ATTENDS]->(c:Class) WHERE s.id =1 
RETURN s.id AS student_id , s.name as student_name, c.name as class_name 

通過這個查詢,如果關係存在,那麼所有的值,如果沒有關係存在,那麼所有的值都是空的。

回答

1

通過嘗試不同的查詢來解決此問題。

MATCH (s:Student {id :1}) 
OPTIONAL MATCH (s)-[:ATTENDS]->(c:Class) 
RETURN s.id AS student_id , s.name as student_name, c.name as class_name 

需要先匹配所需條件,然後是可選匹配。如果有人有更簡單的解決方案,那麼請發佈。

1

寫了圖表的依據此在http://gist.neo4j.org/?11110772

簡短的回答是:

MATCH (s:Student) OPTIONAL MATCH (s)-->(c:Course) 
RETURN s.name, c.name 

閱讀要點了解更多詳情。 http://gist.neo4j.org/?11110772

請注意,您不能忽略第一個MATCH。如果整個查詢是可選的,則不會檢索任何內容。在SQL中,您還可以在一個表上進行非可選查詢,然後對第二個可選表進行左連接。

3

如果你不在乎關係的類型,你可以運行

MATCH (student:Student {id :1}) 
OPTIONAL MATCH (s)-->(class:Class) 
RETURN student.id, student.name, class.name 

,你就沒有必要設置別名。

相關問題