N1QL(Couchbase)-不存在关系的Couchbase中的真正左连接

N1QL(Couchbase)-不存在关系的Couchbase中的真正左连接,couchbase,n1ql,Couchbase,N1ql,为了简单起见,假设我有以下DB: { id: "a_id", // This is the key, not a field in the document type: "a" } { id: "b_id", type: "b", a: "a_id" } { type: "c", b: "b_id" } 如你所见,有一种典型的亲子关系(“a”有许多“b”,“b”有许多“c”) 让我们假设并不总是有一个类型为“c”的文档——例如,我

为了简单起见,假设我有以下DB:

{
    id: "a_id",   // This is the key, not a field in the document
    type: "a"
}
{
    id: "b_id",
    type: "b",
    a: "a_id"
}
{
     type: "c",
     b: "b_id"
}
如你所见,有一种典型的亲子关系(“a”有许多“b”,“b”有许多“c”) 让我们假设并不总是有一个类型为“c”的文档——例如,我有五个“b”文档,但只有一个文档有一个与之相关的“c”文档。 我想写一个连接查询,它会给我所有属于“a”的“b”,如果它们存在的话——所有属于“b”的“c”,但是对于没有“c”的“b”文档,我不会得到任何结果——我想得到所有五个“b”文档,以及一个相关的“c”文档。 我的查询如下所示:

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";
我错过了什么?
谢谢

如果c缺失,WHERE子句后联接筛选器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");
也结帐