2016-08-20 5 views
0

사이퍼에 세미 조인 쿼리를 작성하고 싶습니다.사이퍼에 세미 조인 쿼리를 작성하는 방법은 무엇입니까?

이 이

그래서 출력 Sample Graph을 샘플 그래프에 대한 다음되어야한다 :

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-- 창조 Cypher 코드에 문제가 있다고 생각합니다. 나는 같은 이름을 가진 여러 교수 노드를보고있다 ... 나는 학생들이 같은 문제를 가지고 있다고 생각한다. MERGE 문이 실제로 병합을 수행하지 않는 것과 같습니다. 계산 된 값이 관련되어있을 때 이상한 상호 작용이 있습니까? – InverseFalcon

관련 문제