SELECT foo AS栏无效

时间:2012-05-02 09:16:04

标签: mysql mysql-error-1054

我的代码:

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND IDcategoria = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

麻烦的是我收到以下错误:

Unknown column 'IDcategoria' in 'where clause'

任何人都知道为什么?

4 个答案:

答案 0 :(得分:2)

使用mapa.cat_id而不是IDCategoria,因为mysql稍后会执行SELECT。

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

喜欢这个订单

FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause

答案 1 :(得分:1)

你不能在WHERE子句中添加别名。

使用此:

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;
祝你好运。

答案 2 :(得分:1)

SQL总是在SELECT语句之后执行WHERE语句。 如果我错了,请纠正我,但SQL执行你的声明如下:

FROM
INNER JOIN
WHERE
AND
SELECT
ORDER BY

正如您现在所看到的,当SQL出现在您的AND语句中时,它还不知道mapa.cat_id实际上表示为IDcategoria。一个简单的解决方案是将IDcategoria中的AND更改为mapa.cat_id 因此,您的查询将如下:

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

答案 3 :(得分:1)

您不能在where子句中使用别名,而应该编写列名。如果想在你必须使用子查询的地方使用别名

SELECT * FROM (SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1  
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30) WHERE IDcategoria = 15 ;

现在它会起作用。