我正在使用max()在MySQL中尝试子查询,并且我一直遇到错误。查询的要点如下(虽然我已经更改了字段名称)。
select table1.field1, table1.field2, table2.field3, table2.field4, table3.field5,
(select max(age)
from age_table
where age_table.person = table2.person)
from table1
inner join table2 on table2.person = table1.person
inner join table3 on table3.person = table1.person
inner join age_table on age_table.person = table1.person
当我尝试这个时,我得到一个指向
的语法错误来自age_table的',其中age_table.person = table2.person'
......但我无法弄清问题是什么。
答案 0 :(得分:3)
使用表别名来区分表,而不必使用完整的表名:
SELECT t1.field1, t1.field2, t2.field3, t2.field4, t3.field5,
(SELECT MAX(at.age)
FROM AGE_TABLE at
WHERE at.person = t2.person) AS max_age
FROM TABLE1 t1
JOIN TABLE2 t2 ON t2.person = t1.person
JOIN TABLE3 t3 ON t3.person = t1.person
我删除了似乎是AGE_TABLE的冗余JOIN,因为它没有在SELECT子句中使用。
为派生列值定义列别名也是一种好习惯 - 使它们更容易引用。有关示例,请参阅“max_age”。
答案 1 :(得分:1)
您需要为子查询创建别名,例如:
(select max(age) from age_table where age_table.person = table2.person) temp
并保留其余的东西。