使用max()的MySQL中的子查询错误

时间:2010-07-21 21:48:46

标签: mysql mysql-error-1064

我正在使用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'

......但我无法弄清问题是什么。

2 个答案:

答案 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

并保留其余的东西。