我在使用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列的结果?
非常感谢您的帮助。
答案 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_name
和t.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;