2016-09-02 1 views
0

나는 패밀리 트리 그래프를 가지고 있습니다. 관심이있는 사람이 몇 명 있으며, 직계 가족이 누구인지 보았습니다.Neo4j에서 두 개의 서로 다른 사이퍼 쿼리 결과를 결합했습니다.

MATCH (p:Person)-[]-(parent:Person)-[]->(parents_kids:Person) 
WHERE p.`person_of_interest` = 'y' 
RETURN p, parent, parents_kids 
; 

나는 또한 관심있는 사람의 자녀 반환 할 수 있습니다 : 내가 관심을 가진 사람의 형제 자매 반환하는 좋은 질문이 좋은 별도로

MATCH (p:Person)-[]->(children:Person) 
WHERE p.`person_of_interest` = 'y' 
RETURN p, children 
; 

이러한 쿼리 작업을하지만 어떻게 결과를 함께 반환합니까?

문제는 관심있는 사람들이 데이터베이스에 애들이없는 경우가 종종 있습니다. 반면에 관심있는 사람들은 데이터베이스에 부모가없는 경우가 있습니다. 그래서 두 경우 모두 일치하는 쿼리를 작성할 수는 없습니다. 이 불분명 경우에, 나는 물론이를 수정할 수 있습니다

| person_of_interest | silblings | children | 
|--------------------|-----------|----------| 
|     |   |   | 
|     |   |   | 

:

내가 밖으로 간단한 테이블을 얻을 수 꿔 ... 나는 NULL 값이 적절한 경우가 이런 식으로 뭔가를 생각하고 있어요 최소한의 재현 가능한 예제를 가진 질문. 감사!

+0

나는 부모와 자식 사이의 첫 번째 일치에서 부모와 자식의 관계 방향이 아래라고 가정 할 것입니까? 방향이없는 관계로, 부모를 부모와 자식 모두와 일치 시키거나 (또는 ​​다른 사람이 가리키는 관계와) – InverseFalcon

+0

출력을 위해 부모를 모으는 열과 자식을 수집하는 별도의 열을 원하게됩니까? 또는 부모와 자식이 모두 포함 된 단일 열을 원하면 (존재하는 경우)? 또는 다른 것? 원하는 쿼리 출력을 제공하면보다 유용한 솔루션을 제공하는 데 도움이됩니다. – InverseFalcon

+0

# 1 예 그 방향을 더 분명하게하기 위해 그 화살표를 그곳에 올릴 수있었습니다. 제 경우에는 그래프가 어떻게 설정 되었기 때문에 아무 것도 바뀌지 않지만 관찰에 감사드립니다. –

답변

2

이 쿼리는 parents, siblingschildren과 같이 관심있는 Person 콜렉션과 해당 콜렉션 (아마도 비어 있음)을 반환해야합니다.

MATCH (p:Person {person_of_interest: 'y'}) 
OPTIONAL MATCH (p)<-[:HAS_CHILD]-(parent:Person) 
OPTIONAL MATCH (parent:Person)-[:HAS_CHILD]->(sib:Person) 
    WHERE sib <> p 
OPTIONAL MATCH (p)-[:HAS_CHILD]->(kid:Person) 
RETURN 
    p, 
    COLLECT(DISTINCT parent) AS parents, 
    COLLECT(DISTINCT sib) AS siblings, 
    COLLECT(kid) AS children; 

쿼리는 HAS_CHILD 관계 유형은 부모 - 투 - 자식 관계를 나타 내기 위해 사용되는 것으로 가정합니다.

관심있는 사람의 검색 속도를 높이려면 index 또는 unique constraint:Person(person_of_interest)에 만들어야합니다.

+0

마지막 편집은 모두 함께 만들어졌습니다. 출력은 이제 키 쌍의 목록입니다. 굉장해. 지금부터이 작업을 많은 작업의 기반으로 삼을 것입니다. 정말 고맙습니다!! –

관련 문제