2012-01-27 21 views
7

No puedo entender por qué recibo una columna desconocida cuando la columna es un alias que se creó. Cualquier ayuda sería genial.Problema desconocido de la columna con el alias de mysql

código:

SELECT DISTINCT 
    c.id, 
    ((SUM(c.width_feet)*12)+(SUM(c.width_inches))) AS width, 
    ((SUM(c.height_feet)*12)+(SUM(c.height_inches))) AS height 
    FROM carpets AS c 
    WHERE c.active = '1' 
    AND (width BETWEEN '0' AND '275') 
    AND (height BETWEEN '0' AND '599') 
    ORDER BY c.item_no 

error:

Unknown column 'width' in 'where clause'

Respuesta

10

No puede acceder al alias directamente por su nombre.

Una solución es envolver la consulta con los alias en una subconsulta, y luego hacer referencia a los nombres de alias en una consulta externa:

SELECT DISTINCT * 
FROM 
    (
    SELECT c.id, 
      ((SUM(c.width_feet)*12)+(SUM(c.width_inches))) AS width, 
      ((SUM(c.height_feet)*12)+(SUM(c.height_inches))) AS height 
    FROM carpets AS c 
    WHERE c.active = '1' 
    ) sub 
WHERE (sub.width BETWEEN '0' AND '275') 
AND (sub.height BETWEEN '0' AND '599') 
ORDER BY sub.item_no 
+0

que eliminó el error, pero ahora no muestra resultados cuando debería mostrar 1046 resultados ... alguna idea –

+0

@Nate - ¿La consulta interna recupera? cualquier resultado? Y si es así, ¿el ancho y la altura están dentro de los límites que está buscando? –

+0

@Nate - También moví el 'DISTINCT' hasta el' SELECT' externo. Eso podría haber estado causando problemas también. –

0

No creo que usted puede utilizar su alias de "ancho" en su "anchura entre .. y .."; necesita repetir el cálculo sin procesar, por desgracia. Lo mismo para "altura". Por lo tanto, lo siguiente debería funcionar:

SELECT DISTINCT c.id, 
     ((SUM(c.width_feet)*12)+(SUM(c.width_inches))) AS width, 
     ((SUM(c.height_feet)*12)+(SUM(c.height_inches))) AS height 
FROM  carpets AS c 
WHERE c.active = '1' 
AND  (((SUM(c.width_feet)*12)+(SUM(c.width_inches))) BETWEEN '0' AND '275') 
AND  (((SUM(c.height_feet)*12)+(SUM(c.height_inches))) BETWEEN '0' AND '599') 
ORDER BY c.item_no 
+1

al intentar que me aparezca el error: uso no válido de la función de grupo –

6

Usted puede utilizar alias en la cláusula ORDER BY, pero se puede No use alias en la cláusula where o group by. O repites la expresión o puedes usar una subconsulta.

Cuestiones relacionadas