2010-10-25 63 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