2017-12-19 7 views
0

ためのCouchbaseに参加、私は以下のDBを持って言うことができます "c"ドキュメントが常にあるとは限りません。たとえば、5つの "b"ドキュメントがありますが、1つしかない場合は、次のようになります( "a" HAS MANY "b"、 "b" HAS MANY "c"それに関連する "c"ドキュメント。 "a"に属するすべての "b"と、 "b"に属するすべての "c"が存在する場合には "b"を持たないJOINクエリを作成したい"c"私は何の結果も得ていません - 5つの "b"文書と関連する1つの "c"文書をすべて取得したいと思います。 私のクエリは次のようになります。私はここで何をしないのですN1QL(Couchbaseの)真LEFTは簡単のため非既存の関係

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"はfalseです。

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

をチェックアウト
関連する問題