- 締切済み
SQL副問い合わせ内のエイリアス
DEPARTMENTとEMPLOYEESのテーブルがあり、そこから社員のいない部署を取得しようとしているのですが、わたしの書いたSQLがうまく動きません。作動しない理由をご教授くだされば助かります。オラクル8.1.7.4.1で動作させなければならず、left outer joinが使えないところからの質問です。 データはこういう構造です(*がプライマリーキィを表す)。 DEPARTMENT: *DEPT__T, DEPT_NAME, .... EMPLOYEES: *EMPLOYEES__T, DEPT_NAME, ... これに対して、 select dept__t, (select count(*) from employee where department.dept__t = employees.dept__t) counter from department where counter = 0 というSQLで社員のいない部署を取ろうとしたのですが、ORA-00904: "COUNTER": invalid identifier.が返されてしまいます。 WHERE文にcounterというエイリアスではなくカラムそのものを書くと問合せが正常に作動するのですが、なぜでしょうか。オラクルのバージョンが古いことが原因でしょうか。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- MZ-80B
- ベストアンサー率56% (46/81)
回答No.5
- X-trail_00
- ベストアンサー率30% (438/1430)
回答No.4
- MZ-80B
- ベストアンサー率56% (46/81)
回答No.3
- X-trail_00
- ベストアンサー率30% (438/1430)
回答No.2
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.1
補足
>ただ純粋なエラーの原因を探している・・・ 質問の趣旨はその通りです。 ご示唆いただいたSQL リファレンスマニュアルを読みこんだところ、SQL文は FROM WHERE GROUP BY HAVING SELECT UNION ORDER BY の順で解釈されると読み取れる記述を見つけました。わたしのSQLではSELECT句で宣言されたエイリアスをWHERE句で比較するよう要求しているので、データベースがまだ定義されていないエイリアスは解釈できないとしてオラクルエラーを出しているのではないかというのがわたしの独自にたどり着いた結論です。 この理解でよいのかだけ最後に確認させてください。