我的代码:
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'
任何人都知道为什么?
答案 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 ;
现在它会起作用。