2010-07-21 6 views
1

J'essaie une sous-requête dans MySQL en utilisant max(), et je continue à courir dans une erreur. L'essentiel de la requête est ci-dessous (bien que j'ai changé les noms de champs).Erreur de sous-requête dans MySQL avec 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 

Lorsque je tente cela, je reçois une erreur de syntaxe qui pointe vers

'de age_table où age_table.person = table2.person'

... mais je peux Ne comprenez pas quel est le problème.

+0

Merci, OMG Ponies ... Je me demandais pourquoi tout cela apparaissait sur la même ligne! – chimeracoder

Répondre

3

alias de table Permet de différencier entre les tables, sans avoir à utiliser le nom complet de la table:

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 

j'ai enlevé ce qui semblait être une redondance attacheront à l'AGE_TABLE, car il n'a pas été utilisé dans la Clause SELECT

Il est également bon de définir un alias de colonne pour les valeurs de colonnes dérivées - les rend plus faciles à référencer. Voir "max_age" pour un exemple.

1

Vous devez créer un alias pour votre sous-requête, par exemple:

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

et laisser le repos des choses telles qu'elles sont.