1

我的代码:

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

4 回答 4

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
于 2012-05-02T09:21:29.750 回答
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;

祝你好运。

于 2012-05-02T09:22:21.580 回答
1

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

FROM
INNER JOIN
WHERE
AND
SELECT
ORDER BY

所以你现在可以看到,当 SQL 出现在你的AND语句中时,它还不知道它mapa.cat_id实际上表示为IDcategoria. 一个简单的解决方案是将IDcategoria您的to 更改ANDmapa.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;
于 2012-05-02T09:22:22.687 回答
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 ;

现在它可以工作了。

于 2012-05-02T09:22:51.567 回答