有人可以向我解释一下,为什么这个mysql查询会在“on子句”中抛出“未知列'n.Id'”错误?这对我来说真的没有任何意义。
SELECT n.Id,
n.Name,
COUNT(*)-1 AS level,
seo.URLName
FROM NestedSetsTable AS n,
NestedSetsTable AS p
LEFT JOIN SEO__Table AS seo
ON seo.ElementId = n.Id
AND seo.ElementCat = 1
WHERE n.lft BETWEEN p.lft AND n.rgt
GROUP BY n.lft
ORDER BY n.lft
基本上,NestedSetsTable有列Id,Name,lft,rgt,而seo表有一个 ElementId(包含Categorie的id),ElementCat(包含int,在本例中为1,类别为2,例如2),URLName(包含干净URL的名称.example.com/Categories/例如myCleanName)
谢谢
编辑:我解决了这个问题,但我之所以要问的原因是因为我想弄明白为什么n.Id在ON子句中是未知的,因为它对我来说没有任何意义。
答案 0 :(得分:1)
您的联接语法不正确。我不确定你想如何加入你对NestedSetsTable的两个引用,所以现在我假设它是Id的内部联接。此外,我不记得MySQL如何处理分组,但通常您需要对查询中的所有非聚合列进行分组,例如n.Id, n.Name, seo.URLName
SELECT n.Id,
n.Name,
COUNT(*)-1 AS level,
seo.URLName
FROM NestedSetsTable AS n
CROSS JOIN NestedSetsTable AS p
LEFT JOIN SEO__Table AS seo
ON seo.ElementId = n.Id
AND seo.ElementCat = 1
WHERE n.lft BETWEEN p.lft AND n.rgt
GROUP BY n.lft
ORDER BY n.lft
答案 1 :(得分:-1)
将条件AND seo.ElementCat = 1
移至WHERE
子句:
....
LEFT JOIN SEO__Table AS seo ON seo.ElementId = n.Id WHERE n.lft BETWEEN p.lft AND n.rgt AND seo.ElementCat = 1
...