我有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
通过此查询,如果存在关系则所有值,如果不存在关系,则所有值都为空。
答案 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中,您还在一个表上有一个非可选查询,然后左连接到第二个可选表。