2012-09-29 73 views
1

我有一个包含类别信息的表。未知复合列名称

表中有一个标记父类和子类的字段。

我试图通过查询列出父类别,然后列出其子类别。

我想是这样

SELECT 
    CategoryID.categories as ParentID, 
    CategoryName.categories AS ParentName, 
    parents.* 
FROM 
    categories AS parents LEFT JOIN categories AS child 
    ON child.Parent = parents.ParentID 

但遗憾的是它没有为我工作。它给了我一个奇怪的错误。

[SQL] SELECT CategoryID.categories as ParentID, CategoryName.categories 
AS ParentName, parents.* FROM categories as parents LEFT JOIN categories as child on child.Parent = parents.ParentID 

[Err] 1054 - Unknown column 'CategoryID.categories' in 'field list' 

我确定所有字段的名称都是正确的。

回答

1

首先,db引擎读取列[table]。[column],而不是相反。所以它不会理解CategoryID.categories是什么 - 没有称为CategoryID的表。

你定义你的表是这样的

 FROM categories AS parents 
LEFT JOIN categories AS child 

因此,你需要用你给他们的名字引用它们。即

SELECT 
     parents.CategoryId as ParentId, 
     child.CategoryId as ChildId, 
     ... 
0

尝试

SELECT 
    parents.CategoryId AS ParentId, 
    parents.CategoryName AS ParentName, 
    parents.* -- < this is probably child.* 
FROM 
    categories AS child LEFT JOIN categories AS parents 
    ON child.parent = parents.CategoryId 

对SQL的命名约定是[表]。[列]。您首先使用列名称。

0

SELECT你写CategoryID.categoriesCategoryName.categories ...的规则是把它写为alias name.field name

因此,您会收到错误Unknown column 'CategoryID.categories' in 'field list'

我建议你尝试这样的 -

SELECT parent.CategoryID as ParentCategory, parent.CategoryName as ParentCatName, 
    child.CategoryID as ChdCategory, child.CategoryName as ChdCatName 
FROM categories AS parents LEFT JOIN categories AS child 
    ON child.Parent = parents.ParentID 

你也可以在这里查找:mysql joins with alias