2014-04-20 4 views
1

J'ai 2 noeuds permet de dire de 2 type « étudiant » etObtenir propriété de noeud Neo4j avec relation en option comme rejoindre gauche

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

étudiant peut avoir des relations en option avec le nœud de classe comme « ASSISTE À » .

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

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

Je veux un dossier d'étudiant comme toutes ses propriétés. Si la relation est présente, class_name correspondra au noeud "Class" actuel sinon class_name sera nul.

{student_id,student_name,class_name} 

J'ai essayé par une requête chiffrée, mais n'obtenant pas de résultat. S'il vous plaît aider. Par cette requête, si la relation existe alors toutes les valeurs, si aucune relation n'existe, alors toutes les valeurs sont nulles.

Répondre

1

Vous avez trouvé une solution à ce problème en essayant différentes requêtes.

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 

Vous devez d'abord faire correspondre les critères requis, puis optionnellement correspondre. Si quelqu'un a une solution plus simple, veuillez poster.

1

A écrit un graphique pour ce au-essentiel http://gist.neo4j.org/?11110772

La réponse courte est:

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

Lire l'essentiel pour plus de détails. http://gist.neo4j.org/?11110772

Notez que vous ne pouvez pas ignorer le premier MATCH. Si la requête entière est facultative, rien ne sera récupéré. Dans SQL, vous avez également une requête non facultative sur une table, puis une jointure à gauche sur la deuxième table facultative.

3

Si vous ne se soucient pas du type de relation, vous pouvez exécuter

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

et vous aurez pas besoin de définir des alias.

Questions connexes