我正在尝试选择所有带孩子的父母。
我有以下查询:
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
}
我收到以下错误:
评估投影时出错。 -原因:相关子查询中的FROM必须具有USE KEYS子句:FROM演示。
错误代码: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
但是如果我将"parent"
替换为a.name
,则会出现相同的错误。
答案 0 :(得分:2)
您需要先执行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分组。