충분히 좋은 제목을 찾을 수 없었습니다. 이것은 어려울 것입니다. 그러나 최선을 다해 제 상황을 설명하려고 노력할 것입니다.복수 (다른) 열이있는 하위 쿼리를 사용하는 방법
저는 저에게 유일한 해결책은 두 번째 쿼리에서 일치를 시작하는 데 첫 번째 쿼리의 결과가 사용되는 두 개의 개별적인 사이퍼 쿼리를 사용하는 것으로 보이는 문제가 발생했습니다. 끝난. 내가 시도한만큼 WITH 나 UNION 절이 나에게 원하는 결과를 줄 수 없기 때문에 내 문제가 고유하다고 느낀다.
내가하려는 것은 다음과 같습니다.
MATCH (n1)--(n2) WHERE n2.name="something" WITH n2
MATCH (n2)--(n3) WHERE n3.name="something_else" WITH n3 as to_be_returned, n3 as to_continue
MATCH (to_continue)--(n4) WHERE n4.name="something"
RETURN to_be_returned as FirstPartResults, n4 as SecondPartResults
내가이에 내가 처음 두 경기의 끝 부분에 도착하면, 나는 Neo4j 정보 (N3)의 별도의 조각으로 일치했다대로 유지하고자 여기에하려고 노력하고 있어요 같은 시간에 계속 진행하고 더 많은 일치를 만들어 n4까지 줄이면 n3과 n4가 모두 반환됩니다. 그러나 Neo4j가하는 일은 n4에 대한 정확한 결과를 제공하지만 n3의 결과는 항상 n4와 동일합니다. 즉, "to_be_returned"로 얽혀 있습니다. 반면에 "to_continue" "to_be_returned"만 남겨 둡니다.
하나의 쿼리에서이 작업을 수행하려는 이유는 두 개의 개별 쿼리로 나누면 페이지 매김 문제를 피하려고하기 때문입니다.
내가 모든 다음 사용 UNION을 시도했다 :
MATCH (n1)--(n2) WHERE n2.name="something" WITH n2
MATCH (n2)--(n3) WHERE n3.name="something_else"
RETURN n3.name as "to_be_returned"
UNION ALL
MATCH (n1)--(n2) WHERE n2.name="something" WITH n2
MATCH (n2)--(n3) WHERE n3.name="something_else" WITH n3
MATCH (n3)--(n4) WHERE n4.name="something"
RETURN n4 as SecondPartResults
이 나에게 다음과 같은 오류 제공 :
All sub queries in an UNION must have the same column names
동일하게 열 이름을 변경을, 정확히 같은 결과를 얻을 수 있습니다 UNION을 사용하지 않고 원래 쿼리.
어떤 이유로 편집
, 나는 그냥 MATCH 쿼리와 함께 여기 CREATE 문을 붙여 때문에 병, 콘솔 URL을 만들고 공유 할 수 없습니다입니다.
create
(_6:Crew {name:"Neo"}),
(_7:Crew {name:"Morpheus"}),
(_8:Crew {name:"Trinity"}),
(_9:Crew:Matrix {name:"Cypher"}),
(_10:Matrix {name:"Agent Smith"}),
(_11:Matrix {name:"The Architect"}),
(_12:USER {name:"Sherlock Holmes"}),
(_13:USER {name:"John Watson"}),
_6-[:KNOWS]->_7,
_6-[:LOVES]->_8,
_6-[:FRIENDS]->_13,
_7-[:KNOWS]->_8,
_7-[:KNOWS]->_9,
_8-[:FRIENDS]->_12,
_9-[:KNOWS]->_10,
_10-[:CODED_BY]->_11
MATCH (c1:Crew) WHERE c1.name="Morpheus" WITH c1 MATCH (c1)--(c2:Crew) WITH c2 AS to_be_returned, c2 AS to_continueMATCH (to_continue)--(u:USER) WHERE u.name="Sherlock Holmes" RETURN to_be_returned AS FirstPart, to_continue AS SecondPart;
첫 번째 결과와 두 번째 파트 결과가 모두 동일하게 나옵니다. 첫 번째 부분에는 결과 트리니티와 네오가 포함되어야하며 두 번째 부분에는 트리니티가 있어야합니다.
"to_continue"별명의 원래 C2에 맞게 계속 일치 (C2)를 수집하고 "to_be_returned"로 컬렉션을 할당 할 수있는 것은 HTTP (A [콘솔 예]입니다 : //neo4j-console-20.herokuapp.com/r/vz6mg6), 비슷한 것을 할 수 있고 쿼리에서 반환 할 데이터를 설명 할 수 있습니까? '선택적인 일치'문제입니까? 즉 '두 번째 부분'이 일치하지 않을 수 있습니다. 아니면 "그걸로 망쳤다"는게 무슨 뜻이야? – jjaderberg
좀 더 구체적인 예가 있습니까? collect를 사용하면 구문의 카디널리티를 변경하지 않고 컬렉션에 특정 정보를 넣을 수 있습니다. 당신의 모든 성명서를 하나로 통합하는 것은 어떨까요? 또는 이름을 선행하여 노드를 검색 한 다음 (선택 사항) 일치를 수행합니까? –
샘플 데이터 세트와 잘못된 결과를주는 샘플 쿼리로 질문을 편집했습니다. 이제는 더 명확 해지기를 바랍니다. @jjaderberg 필자는 선택적 매치 문제라고 생각하지 않습니다. Michael Hunger 수집 (to_be_resturned)을 사용해 보았지만 동일한 문제가 발생합니다. 나는 당신의 다른 제안을 시도하지 않았지만, 나는 나의 편집이 질의를 더 명확하게 할 수 있기를 바랬다. Btw, 답변 해 주셔서 감사드립니다. 고맙습니다 !! – arijeet