0

我有以下表格正在查询:

categories
  -id
  -name
  -parent_id
  -last

products2categories
  -id
  -product_id
  -category_id

我想要做的是获取记录category name,表中的category id为10,表中的为 1product_idproducts2categorieslastcategories

这是我尝试执行的查询:

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“my_name”的 ID 和名称,但它必须基于表 products2categories,因为一个产品可以有多个与其相关的类别。

提前致谢!

4

4 回答 4

4

代替

WHERE `categories.last` = 1 

WHERE `categories`.`last` = 1 

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

于 2013-08-09T11:18:18.757 回答
1

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

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

于 2013-08-09T11:18:30.307 回答
1

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

所以

`categories.last`

应该

`categories`.`last`

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

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

categories.last

只有包含空格或其他特殊字符的列名才需要反引号,并且在某些情况下可能与某些保留字相同的名称需要使用反引号。但据我所知,您根本不需要它们,而且我不记得每个人都必须使用它们。

于 2013-08-09T11:20:28.827 回答
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
于 2013-08-09T11:21:20.583 回答