sql - MySQL,聚合子选择问题

标签 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 来缩小结果范围,但最终我得到了一个包含所有标签的单行。

最佳答案

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

关于sql - MySQL,聚合子选择问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688249/

相关文章:

sql - 如何从表列中删除唯一约束?

sql - 如何将此GROUP BY/MIN SQL查询转换为LINQ?

sql - 在 Postgresql 的 where 子句中使用别名列

sql - 在 SQL 中除以 'Over' 子句有效但除以 'Alias' 不

sql - PostgreSQL-错误 : column does not exist SQL state: 42703

php - mysql IN 运算符按降序返回值

java - 如何在列表的所有元素中选择位置

mysql - 如何单独计算匹配的行?

php - 使用 PHP 和 MySQL 保留修订历史

php - 在 mysql 数据库中插入多个字符串的更好方法