代码之家  ›  专栏  ›  技术社区  ›  Joseph

列不存在?

  •  5
  • Joseph  · 技术社区  · 15 年前

    想知道有没有人能帮我解决这个问题:

    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
    

    但是这个专栏 应该

    1 回复  |  直到 15 年前
        1
  •  3
  •   OMG Ponies    15 年前

    不能在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允许在 HAVING GROUP BY