2010-10-25 12 views
5

zastanawiałem się, czy ktoś może mi pomóc trochę z tego zapytania:Kolumna nie istnieje?

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; 

Chcę tylko mieć wyniki, gdzie count (który zostanie zmieniona) jest równa 1. pojawia się błąd z tego zapytania:

ERROR: column "tempcolumn" does not exist 

Ale kolumna powinny istnieje, prawda? Czy ktoś może pomóc? Dzięki!

Odpowiedz

3

Nie można odwoływać się do aliasu kolumny w klauzuli 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 

W tradycyjnej SQL, najwcześniej można odwołać aliasu kolumna jest klauzula ORDER BY. Ale MySQL i SQL Server umożliwiają dostęp w klauzulach HAVING i GROUP BY.

+0

Używałem aliasu kolumn, ponieważ WHERE nie pozwoliłby mi bezpośrednio korzystać z COUNT (mówi, że nie może używać agregatów), ale HAVING działa idealnie. Dzięki za pomoc! – Joseph

+0

@Airjoe: Tak, nie można używać funkcji agregujących (COUNT, SUMA, MIN lub MAX) w klauzuli WHERE poza podzapytaniem - należy użyć do tego klauzuli HAVING. –

Powiązane problemy