MySQL,聚合子选择问题

时间:2011-01-14 05:28:22

标签: sql mysql column-alias

我正在开发一个网站,允许某个游戏的玩家上传他们的关卡并对其进行标记。每个玩家的帐户实际上是该网站使用的论坛(SMF)中的帐户。

我能够返回与特定级别相关的所有标签没有问题;当我想过滤那些匹配该子选择结果的问题时,我遇到了一个问题。它声称专栏'taglist'不存在......

SELECT smf_members.realName,game_levels.*,
       (SELECT GROUP_CONCAT(tag) 
          FROM `game_tags`
         WHERE `game_tags`.uuid = `game_levels`.uuid) AS taglist    
  FROM `game_levels`
INNER JOIN `smf_members` ON `smf_members`.ID_MEMBER = `game_levels`.ID_MEMBER    
WHERE taglist LIKE 'untagged'    
ORDER BY `ID_TOPIC` DESC

提前致谢。我还尝试在标签表上进行第二次INNER JOIN,通过在game_tags.tag上使用常规WHERE来缩小结果,但最后我得到了一个连接了所有标签的行。

1 个答案:

答案 0 :(得分:2)

您不能在WHERE子句中引用列别名 - 最早的MySQL支持列别名引用是GROUP BY。使用:

  SELECT sm.realName, 
         gl.*,
         x.taglist
    FROM GAME_LEVELS gl
    JOIN SMF_MEMBERS sm ON sm.id_member = gl.id_member
    JOIN (SELECT gt.uuid,
                 GROUP_CONCAT(gt.tag) AS taglist
            FROM GAME_TAGS gt
        GROUP BY gt.uuid) x ON x.uuid = gl.uuid
   WHERE x.taglist LIKE 'untagged'    
ORDER BY ID_TOPIC DESC