幼稚園時代「何組」でしたか?

Oracle9iで開発をしています。
インラインビューを使ったSQLで行き詰ってしまいました。

抽出条件として会社テーブルの設立日が12ヶ月前からシステム日付まで、
その該当テーブルのID = 社員テーブルのIDとなる名称を取り出す。
上記に該当する社員テーブルの種類 = 商品テーブルの種類となる名称を取り出す。
となるようにSQLを考えると、

SELECT
T1.NAME,
T2.NAME
FROM
会社テーブル C,
(SELECT * FROM 社員テーブル E WHERE C.ID = E.ID) T1,
(SELECT * FROM 商品テーブル A WHERE T1.KIND = A.KIND)T2,
WHERE
C.DATE BETWEEN add_month(sysdate,-12) AND sysdate

のような感じになりまして、実行すると"C"."ID":無効な識別子ですと
表示されました。
インラインビューの中ではC、T1のように外部の別名を参照することは
できないのでしょうか?
できない場合の対策方法なども教えてください。

A 回答 (1件)

>インラインビューの中ではC、T1のように外部の別名を参照することは


>できないのでしょうか?

少なくとも、FROMに書くサブクエリでは、同列に並べた他の表を参照することはできません。

従来記法の結合で書くなら..

select t1.name,t2.name
from 会社テーブル c,社員テーブル t1,商品テーブル t2
where
c.id=t1.id and t1.kind=t2.kind and
c.date between add_month(sysdate,-12) and sysdate

で良いと思いますし、ansi構文でなくなら、

select t1.name,t2.name
from
会社テーブル c
inner join 社員テーブル t1 on (c.id=t1.id)
inner join 商品テーブル t2 on (t1.kind=t2.kind)
where
c.date between add_month(sysdate,-12) and sysdate

で書けるかと思います。(未検証&思いつき)
    • good
    • 0
この回答へのお礼

FROMのなかのサブクエリは表の参照ができませんでしたか。

サブクエリばかりに目が行ってしまい、結合できることに気がつきませんでした。
ありがとうございます。

お礼日時:2005/10/18 23:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報