2016-08-20 7 views
0

私はcypherで半結合クエリを書いてみたい。 Sample Graphcypherで半結合クエリを書く方法は?

ので、出力はサンプルグラフのために、次のする必要があります:

P2 
P3 

これが行われます例えば、私は教授が次のグラフでグレードと、少なくとも一人の学生以上の9.0を持っている教授がそのようなことを見つけたいです

Select Professor.name 
From Professor 
where exists (
       select * from Student 
       where Student.grade >= 9.0 and 
       Student.guide_id = Professor.id 
      ) 

答えて

1

次のようにすると仮定、例えば、我々は教授と学生のデータを追加します:

UNWIND RANGE(1,1000) as i 
WITH 'professor_' + toInt(rand()*20) as pname, 
     'student_' + i as sname 
MERGE (P:Professor:Person {name: pname}) 
MERGE (S:Student:Person {name: sname}) SET S.grade = rand()*10 
MERGE (P)-[:guide]->(S) 
次のようにSQLで

クエリ学生グレード> = 9.0持っている教授のリスト:返信用

MATCH (P:Professor)-[:guide]->(S:Student) WHERE S.grade >= 9.0 
RETURN distinct P 
+0

感謝を。しかし、このサイファーのクエリは、(P:教授) - [:ガイド] - >(S:スチューデント)のサイズが大きい場合、非常に高価な操作になる "別個"を適用します。私は教授から始まり、エッジを利用して生徒ノードに行き、生徒の成績をチェックするクエリを探していました。可能であれば、それに返信してください。 –

+1

@SumitNeelam私はこれが最良の選択だと思う。 –

+0

@ stdob--あなたの作成サイファーコードに何か問題があると思います。私は同じ名前の複数の教授ノードを見ています...私は学生がおそらく同じ問題を抱えていると思います。これは、MERGE文が実際にマージしていないようなものです。計算された値が関係しているときに何らかの異様な相互作用がありますか? – InverseFalcon

関連する問題