子查询中的SQL Select Max

时间:2018-11-10 20:48:44

标签: sql subquery

我在使用SQL子查询时遇到了麻烦,尽管我认为这是相当基本的,但互联网似乎无法解决问题。我在FROM语句中有一个子查询,其中有一个MAX()函数,在其余查询中似乎无法引用此数据。查询在这里:

SELECT 
    m.nameFirst, m.nameLast, t.salary, te.name
FROM
    (SELECT 
         MAX(salary), teamID 
     FROM 
         salaries 
     GROUP BY 
         teamID) AS t, master AS m, teams AS te, salaries AS s
WHERE 
    t.salary = s.salary 
    AND s.teamID = t.teamID 
    AND s.playerID = m.playerID 
    AND te.teamID = t.teamID;

子查询单独运行时,返回的结果如下:

+-------------+--------+
| MAX(salary) | teamID |
+-------------+--------+
|    13166667 | ANA    |
|    16000000 | ARI    |...

但是,当我尝试运行整个查询时,会得到以下结果:

  

错误1054(42S22):“字段列表”中的未知列“ t.salary”

我尝试了一些不同的操作,例如t.MAX(salary)MAX(t.salary),甚至只是t.*,但是由于我以后需要使用子查询的结果,因此它只会引发不同的错误。

我应该使用什么名称来调用子查询的MAX列的结果?

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以给它起一个别名以使其变得更容易或在这种情况下可以访问

例如

  SELECT MAX(salary) as max_salary, teamID ... 

然后稍后简单地引用

  t.max_salary

所以在您的示例中,将其更改为

SELECT m.nameFirst, m.nameLast, t.max_salary, te.name
FROM (
    SELECT MAX(salary) as max_salary, teamID 
 -- rest of query

答案 1 :(得分:0)

这是因为子查询中没有返回薪水,错误名称也依次为max(salary) as some_namet.some_name=s.salary

答案 2 :(得分:0)

您可以为max列使用别名,您的代码将起作用:

SELECT m.nameFirst, m.nameLast, t.salary, te.name
FROM (
    SELECT MAX(salary) as salary, teamID 
    FROM salaries 
    GROUP BY teamID
) AS t, master AS m, teams AS te, salaries AS s
WHERE t.salary=s.salary AND s.teamID=t.teamID AND s.playerID = m.playerID AND te.teamID=t.teamID;