我有以下表格即时查询:
categories
-id
-name
-parent_id
-last
products2categories
-id
-product_id
-category_id
我想要做的是获取记录的category name
和category 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,因为一个产品,可以有多个与之相关的类别
提前致谢!
答案 0 :(得分:4)
替换
WHERE `categories.last` = 1
与
WHERE `categories`.`last` = 1
用于转义列和表名的反引号不能用于转义表和列的组合。它必须适用于两者。
答案 1 :(得分:1)
快速检查您的语法:categories.last
不应该是categories
。last
而是
对所有其他“字段”执行相同的操作
答案 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