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.person=table2.person の age_table から」

...しかし、私は問題が何であるかを理解できません。

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 

SELECT句で使用されていないため、AGE_TABLEの冗長なJOINと思われるものを削除しました。

派生列値の列エイリアスを定義することも良い習慣です-それらを参照しやすくします。例については、「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 に答える