0

谁能向我解释一下,为什么这个 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(包含类别的 id)、ElementCat(包含一个 int,在本例中为 1 为类别,2 为产品示例)、URLName(其中包含干净 url 的名称。例如 example.com/Categories/myCleanName )

谢谢

编辑:我解决了这个问题,但我问的原因是因为我想弄清楚为什么 n.Id 在 ON 子句中是未知的,因为它对我来说真的没有意义。

4

2 回答 2

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
于 2013-10-09T12:27:07.893 回答
-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

...

于 2013-10-09T12:29:10.010 回答