此查询会抛出ERROR - [position 0, near 'WHERE' in 'Select path.ePath, path._'] COMMA expected but not found in GROUP BY.
这是我的疑问:
Select path.ePath, path._rowid, doc.Filenumber, COUNT(doc.ePathUID) AS children
from docPath path LEFT OUTER JOIN
docMeta doc
ON doc.ePathUID = path._rowid
GROUP BY path._rowid
我希望能够计算这段关系中的每个孩子,但查询并不起作用。 如何使查询起作用?
答案 0 :(得分:1)
您在错误的上下文中使用ON
语句,而应该是WHERE
:
Select path.ePath, path._rowid, doc.Filenumber, COUNT(doc.ePathUID) AS children
from docPath path LEFT OUTER JOIN
docMeta doc
WHERE doc.ePathUID = path._rowid
GROUP BY path._rowid
答案 1 :(得分:0)
除了使用聚合函数的列之外,您必须按照select中的所有列进行分组。所以应该是这样的:
Select path.ePath, path._rowid, doc.Filenumber, COUNT(doc.ePathUID) AS children
from docPath path LEFT OUTER JOIN
docMeta doc
ON doc.ePathUID = path._rowid
GROUP BY path.ePath, path._rowid, doc.Filenumber
为了更好地理解为什么必须按选择列表中的所有列进行分组: 想象你的列号为vaules 1,1,名字为David,John。你会输入
select ID, Name from table group by ID
现在您将按ID = 1分组,这样您将获得一行值ID为1且NAME列中的值是多少? SQL无法随机选择其中一个名称。所以你必须按他们两个分组
select ID, Name from table group by ID,Name
结果将是这种情况:
ID NAME
1 David
1 John