SQL查询产生了一个我无法解决的错误

时间:2013-08-09 11:15:18

标签: mysql sql

我有以下表格即时查询:

categories
  -id
  -name
  -parent_id
  -last

products2categories
  -id
  -product_id
  -category_id

我想要做的是获取记录的category namecategory id,其中表product_id中的products2categories为10,last位于表中categories是1

这是我试图执行的查询:

SELECT `categories.id`,`categories.name` 
FROM `categories` 
JOIN `products2categories` 
ON `categories.id` = `products2categories.category_id`
WHERE `categories.last` = 1 
AND `products2categories.product_id`= 10

我收到了以下错误:

#1054 - Unknown column 'categories.last' in 'where clause'

要证明我想要得到的东西:

categories
  -id          8
  -name        "my_name"
  -parent_id   0
  -last        1

products2categories
  -id          1
  -product_id  10
  -category_id 1

我希望得到8的ID和“my_name”的名称,但它必须基于表products2categories,因为一个产品,可以有多个与之相关的类别

提前致谢!

4 个答案:

答案 0 :(得分:4)

替换

WHERE `categories.last` = 1 

WHERE `categories`.`last` = 1 

用于转义列和表名的反引号不能用于转义表和列的组合。它必须适用于两者。

答案 1 :(得分:1)

快速检查您的语法:categories.last不应该是categorieslast而是

对所有其他“字段”执行相同的操作

答案 2 :(得分:1)

围绕单个标识符使用反引号:

所以

`categories.last`

应该是

`categories`.`last`

因为表名和列名是单独的标识符。

在这种情况下,顺便说一句,你根本不需要反引号,所以如果删除它们应该可以正常工作,如下所示:

categories.last

只需要对包含空格或其他特殊字符的列名称进行反引号,对于某些情况下等于某些保留字的名称,可能需要反对。但据我所知,在你的情况下你根本不需要它们,我不记得每个人都必须使用它们。

答案 3 :(得分:1)

您正确分隔字段。分别分隔表名和列名:

SELECT `categories`.`id`,`categories`.`name` 
FROM `categories` 
JOIN `products2categories` 
ON `categories`.`id` = `products2categories`.`category_id`
WHERE `categories`.`last` = 1 
AND `products2categories`.`product_id`= 10