在子查询中使用查询结果会返回意外结果

时间:2013-04-21 18:18:23

标签: mysql subquery

表包含(pid,播放器,等级,月份,季节)

我正在尝试创建一个查询,显示每个玩家,他们玩了几个月,这个月他们的排名是什么,以及当月有多少玩家玩过。

这是我正在尝试的

SELECT name as Name
     , month as Month
     , rank as Rank
     , (select count(*) from results where month='month') as TotalPlayers 
FROM `results` 
WHERE season=CurrentSeason 
  and name="Player"

我的子查询返回的结果是0月。如何才能正确?

2 个答案:

答案 0 :(得分:0)

猜猜,但也许这就是你想要的:

SELECT name as Name
     , month as Month
     , rank as Rank
     , TotalPlayers 
FROM `results` r
JOIN (
   SELECT month
        , COUNT(*) as TotalPlayers 
   FROM results
   GROUP BY month
   ) m
ON m.month=r.month
WHERE season=CurrentSeason 
  and name="Player"

答案 1 :(得分:0)

您的子查询返回第0个月的结果,因为month是一个整数,但'month'是一个字符串。 MySQL尝试将字符串转换为整数。因为没有前导数字,所以整数为0。

相反,您希望使用别名来区分表results的两个引用。这样,你可以说两者是相等的。

SELECT name as Name,
       month as Month,
       rank as Rank,
       (select count(*) from results r2 where r.month=r2.month) as TotalPlayers 
FROM `results` r
WHERE season=CurrentSeason 
  and name="Player"

子查询的这种结构称为“相关子查询”,因为内部子查询引用外部查询中的表。