mysql中的子查询问题

mysql中的子查询问题,mysql,subquery,Mysql,Subquery,在过去的n个月里,我一直在努力争取前三名的独特球员。当我尝试执行查询时,我得到一个错误: “where子句”中的未知列“f.SC\U日期” 下面是我的问题 SELECT * from scores f WHERE SC_Id IN ( SELECT SC_Id FROM ( SELECT SC_Id from scores where DATE_FORMAT( SC_Date, "%Y%m" ) = DATE_FORMAT( f.S

在过去的n个月里,我一直在努力争取前三名的独特球员。当我尝试执行查询时,我得到一个错误:

“where子句”中的未知列“f.SC\U日期”

下面是我的问题

SELECT * from   scores f
WHERE
  SC_Id IN (
          SELECT SC_Id FROM (
                  SELECT SC_Id from scores where DATE_FORMAT( SC_Date, "%Y%m" ) = DATE_FORMAT( f.SC_Date, "%Y%m" ) AND US_Id != 0  ORDER BY SC_Score DESC 
                   LIMIT 3
          ) AS u )ORDER BY DATE_FORMAT( SC_Date, "%Y%m" ) DESC, SC_Score DESC
您不能在这样的内部查询中使用f.SC_Date-请记住,括号中的位将首先运行,然后外部的位将在结果上运行

您需要在select语句中声明分数f才能使其生效

我想你根本不需要它-比如:

SELECT * from   scores f
WHERE
  SC_Id IN (
          SELECT SC_Id FROM (
                  SELECT SC_Id from scores where DATE_FORMAT( SC_Date, "%Y%m" ) = DATE_FORMAT( SC_Date, "%Y%m" ) AND US_Id != 0  ORDER BY SC_Score DESC 
                   LIMIT 3
          ) AS u )ORDER BY DATE_FORMAT( SC_Date, "%Y%m" ) DESC, SC_Score DESC

应该有效,除非我误解了您的意图。

您确定需要外部查询吗?-我可能不完全理解MySQL查询的结构,但是如果您将DISTINCT添加到子查询中,似乎根本不需要外部查询。即使您设法纠正语法,在任何大表上,此查询的速度都会非常慢。最好完全重写它,但你必须弄清楚你到底想得到什么,可能需要一些示例数据和预期的输出。它看起来很可怕,但你实际上在寻找什么。似乎有一个分数表,您想要某个给定日期的前3名。但由于模糊性,内部查询的f别名的sc_日期不清楚。或您是否正在寻找分数表中每天可用的前三名分数。所以,如果你有20天的分数,你想在所有20天中排名前3。。。需要完全不同的查询。