1

我正在使用 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 where age_table.person=table2.person'

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

4

2 回答 2

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”。

于 2010-07-21T21:57:25.903 回答
1

您需要为您的子查询创建一个别名,例如:

(select max(age) from age_table where age_table.person = table2.person) temp

其余的事情保持原样。

于 2010-07-21T21:51:40.380 回答