检索计数的子查询

Subquery for retrieving count

我正在尝试 select 所有 parents 的 children。

我有以下查询:

SELECT 
    a.*, 
    (SELECT COUNT(*) FROM demo b WHERE b.parent = a.name) as count 
FROM demo a 
WHERE 
    meta(a).id LIKE "xyz:%" 
    AND a.parent IS MISSING 
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0

我的文档类似于:

xyz:1

{
    id: 1,
    name: "parent",
    createdAt: 1234
}

xyz:2

{
    id: 2,
    name: "child",
    parent: "parent",
    createdAt: 5678
}

我收到以下错误:

Error evaluating projection. - cause: FROM in correlated subquery must have USE KEYS clause: FROM demo.

Error code: 5010

更新: 以下查询似乎有效:

SELECT 
    a.*, 
    (SELECT COUNT(id) as count FROM demo b WHERE b.parent = "parent")[0].count as count 
FROM demo a 
WHERE 
    meta(a).id LIKE "xyz:%" 
    AND a.parent IS MISSING 
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0

但是如果我用 a.name 替换 "parent" 它会给出同样的错误。

您需要执行 ANSI JOIN,然后执行 GROUP BY。查询将如下所示:

SELECT l.name, COUNT(1)
FROM demo l JOIN demo r ON r.name = l.child
GROUP BY l.name

对于 运行 这个查询,您需要在 r 端有一个索引:

CREATE INDEX demo_name_idx ON demo(name)

一定要在实际数据上测试查询;我可能缺少一些皱纹。特别是,如果您的名字不唯一,您可能希望按 l.id 而不是 l.name 分组。