2010-10-25 27 views
5

preguntaba si alguien me podría ayudar un poco con esta consulta:¿Columna no existe?

SELECT u1.id,count(DISTINCT u2.userstatus) as TEMPCOLUMN FROM users AS u1 
JOIN friendssym ON u1.id = friendssym.user_id 
JOIN (SELECT * FROM users) as u2 ON friendssym.friend_id=u2.id 
WHERE TEMPCOLUMN=1 
group by u1.id; 

quiero sólo para tener resultados en la cuenta (que se cambió el nombre) es igual a 1. Me aparece un error con esta consulta:

ERROR: column "tempcolumn" does not exist 

Pero la columna debería existir, ¿verdad? ¿Alguien puede ayudar? ¡Gracias!

Respuesta

3

No se puede hacer referencia a un alias de columna en la cláusula WHERE.

SELECT u1.id, 
     COUNT(DISTINCT u2.userstatus) as TEMPCOLUMN 
    FROM USERS AS u1 
    JOIN friendssym ON u1.id = friendssym.user_id 
    JOIN USERS as u2 ON friendssym.friend_id = u2.id  
GROUP BY u1.id 
    HAVING COUNT(DISTINCT u2.userstatus) = 1 

En SQL tradicional, el más temprano puede hacer referencia a un alias de columna es la cláusula ORDER BY. Pero MySQL y SQL Server permiten el acceso en las cláusulas HAVING y GROUP BY.

+0

Estaba usando un alias de columna porque WHERE no me dejaba usar el COUNT directamente (dice que no puede usar agregados) pero el HAVING funciona perfectamente. ¡Gracias por la ayuda! – Joseph

+0

@Airjoe: Sí, no se pueden usar funciones de agregado (COUNT, SUM, MIN o MAX) en la cláusula WHERE fuera de una subconsulta; es necesario utilizar la cláusula HAVING para eso. –