Ошибка подзапроса в MySQL с max () - PullRequest
1 голос
/ 22 июля 2010

Я пытаюсь выполнить подзапрос в MySQL, используя max (), и продолжаю сталкиваться с ошибкой.Суть запроса приведена ниже (хотя я изменил имена полей).

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 ]

3 голосов
/ 22 июля 2010

Используйте псевдонимы таблиц, чтобы различать таблицы, без необходимости использовать полное имя таблицы:

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 

Я удалил то, что казалось избыточным JOIN для AGE_TABLE, поскольку он не использовалсяпредложение SELECT.

Также полезно определять псевдоним столбца для производных значений столбца, что облегчает обращение к ним.См. "Max_age" для примера.

1 голос
/ 22 июля 2010

Вам необходимо создать псевдоним для вашего подзапроса, например:

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

и оставь все остальное как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...