こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

インラインビューにおける他テーブルの別名参照ができない

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のように外部の別名を参照することは
できないのでしょうか?
できない場合の対策方法なども教えてください。

投稿日時 - 2005-10-15 01:48:46

QNo.1714722

すぐに回答ほしいです

質問者が選んだベストアンサー

>インラインビューの中では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

で書けるかと思います。(未検証&思いつき)

投稿日時 - 2005-10-16 02:22:23

お礼

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

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

投稿日時 - 2005-10-18 23:01:15

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問