2017-10-23 6 views
-2

これは動作しますなぜ誰かが、私に説明してもらえ:が参加 - 表は存在しません - SQL

select t1.id, t1.age 
from mytable t1 
join (select age 
     from mytable 
     group by age) t2 
    on t1.age = t2.age 

ので

select t1.id, t1.age 
from mytable t1 
join (select age 
     from t1 
     group by age) t2 
    on t1.age=t2.age 

のような結合文の第二部では、T1を使用しながら、私にエラーを与える?私の実際の問題で

ERROR 1146 (42S02) at line 17: Table '[...].t1' doesn't exist 

mytableは、選択に対応するので、私はコピー&ペーストして、全体select ... from etc文を結合文の第二部へのを避けるために、t1を使用したいと思います。

答えて

1

パーサはすなわち、

(select age from t1 group by age) 

テーブルt1が存在しないとして、あなたのケースで、サブクエリを評価開始しているためあなたは、サブクエリ外側のクエリで参照することはできません、それは動作しません。 実際にコードを繰り返すつもりがない場合、MySQLはまだCommom Table Expressions(CTE)を実装していないので(Mysqlバージョン8.0)、派生テーブルまたは一時テーブルまたはビューを使用する必要があります。 this other post

私は最良の選択は、コードを繰り返していると思う。

0

FROM句にエイリアスを使用することはできません。

関連する問題