【问题标题】:MySQL, Aggregate SubSelect ProblemMySQL,聚合子选择问题
【发布时间】:2011-06-08 23:07:58
【问题描述】:

我正在开发一个网站,该网站将允许特定游戏的玩家上传他们的关卡并标记他们。每个玩家的帐户实际上是网站正在使用的论坛中的一个帐户 (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 来缩小结果范围,但最后我得到了一个连接所有标签的单行。

【问题讨论】:

    标签: sql mysql column-alias


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多