Left Outer Join查询导致错误

时间:2014-11-28 13:02:22

标签: sql outer-join openbase

此查询会抛出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

我希望能够计算这段关系中的每个孩子,但查询并不起作用。 如何使查询起作用?

2 个答案:

答案 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