2017-12-19 17 views
0

에 대한 카우치베이스 주식회사에 가입, 나는 다음과 같은 DB를 말할 수 "c"문서가 항상있는 것은 아님을 가정합니다. 예를 들어 다섯 개의 "b"문서가 있지만 그 중 하나만있는 경우 ("a"는 "b", "b"는 "c" 그것에 관련된 "c"문서. "a"에 속하는 모든 "b"를 제공하는 JOIN 쿼리를 작성하고, "b"에 속한 모든 "c"는 있지만 "b"가없는 문서의 경우 "c"나는 어떤 결과도 얻지 못합니다 - 5 개의 "b"문서와 관련된 "c"문서 모두를 얻고 싶습니다. 내 쿼리는 다음과 같습니다 : 나는 여기에 무엇을 놓치고N1QL (카우치베이스 주식회사) 진정한 좌 단순화를 위해서 존재하지 않는 관계

SELECT * 
FROM default AS a 
JOIN default AS b ON KEY b.a FOR a 
JOIN default AS c ON KEY c.b FOR b 
WHERE a.type = "a" 
AND b.type = "b" 
AND c.type = "c"; 

? 감사합니다.

답변

1

WHERE 절 게시 결합 필터 (c가 잘못되었을 경우) c.type = "c"가 거짓.

INSERT INTO default VALUES("a_id", { "type": "a" }); 
INSERT INTO default VALUES("b_id", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("b_id1", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("b_id1", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("b_id2", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("b_id3", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("b_id4", { "type": "b", "a":"a_id"}); 
INSERT INTO default VALUES("c_id", { "type": "c", "b":"b_id"}); 

CREATE INDEX ia ON default(a); 
CREATE INDEX ib ON default(b); 

SELECT * 
FROM default AS d 
LEFT JOIN default AS d1 ON KEY d1.a FOR d 
LEFT JOIN default AS d2 ON KEY d2.b FOR d1 
WHERE d.type = "a" 
AND d1.type = "b" 
AND (d2 IS MISSING OR d2.type = "c"); 

또한 https://dzone.com/articles/visually-explaining-n1ql-joins

체크 아웃