使用左连接等可选关系获取neo4j节点的属性

时间:2014-04-20 07:54:32

标签: neo4j relationship cypher

我有2个节点可以说2种类型'学生'和'班级'

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

学生可以与班级节点建立选择关系,作为' ATTENDS'。

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

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

我希望学生记录所有属性。如果存在关系,则class_name将与present" Class"匹配。 node else class_name将为null。

{student_id,student_name,class_name}

我试过cypher查询,但没有得到结果。请帮忙。

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

通过此查询,如果存在关系则所有值,如果不存在关系,则所有值都为空。

3 个答案:

答案 0 :(得分:4)

如果您不关心关系类型,可以运行

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

并且您无需设置别名。

答案 1 :(得分: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

首先需要匹配所需的条件,然后选择匹配。如果有人有更简单的解决方案,请发帖。

答案 2 :(得分: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中,您还在一个表上有一个非可选查询,然后左连接到第二个可选表。