2010-10-25 52 views
5

想知道如果有人可以幫助我有點與此查詢:列不存在?

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; 

我只想有個結果,其中計數(這是改名)等於1。我得到這個查詢時出現錯誤:

ERROR: column "tempcolumn" does not exist 

但列應該存在的,對不對?任何人都可以協助謝謝!

回答

3

您不能在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 

在傳統SQL中,最早可以引用列別名的是ORDER BY子句。但是MySQL和SQL Server允許訪問HAVINGGROUP BY子句。

+0

我正在使用列別名,因爲WHERE不會讓我直接使用COUNT(它說它不能使用聚合),但是HAVING完美地工作。謝謝您的幫助! – Joseph 2010-10-25 23:23:41

+0

@Airjoe:是的,在子查詢之外的WHERE子句中不能使用集合函數(COUNT,SUM,MIN或MAX) - 需要使用HAVING子句。 – 2010-10-25 23:25:21