プロが教える店舗&オフィスのセキュリティ対策術

以下のSQLにおいて、表Cに存在するすべてのレコードを表示したいのですが、
表Aと表Cに存在するものしか表示されません。

表Cをメインとし、表示させる方法はありますでしょうか?

select
A.FITEMNO
from
A
, B
, B B2
, C
where
C.FCHILDITEMNO = A.FITEMNO(+)
and C.FPARENTITEMNO = B2.FITEMNO
and A.FITEMNO = B.FITEMNO
and B.FITEMTYP = 'P'
and (B2.FITEMNO = '123456789')

A 回答 (3件)

select


A.FITEMNO
from
A
, B
, B B2
, C
where
C.FCHILDITEMNO = A.FITEMNO(+)
and C.FPARENTITEMNO = B2.FITEMNO(+) /* (+)はいらない? */
and A.FITEMNO(+) = B.FITEMNO
and B.FITEMTYP(+) = 'P' /* (+)はいらない? */
and B2.FITEMNO(+) = '123456789' /* (+)はいらない? */

ん?Cの全件 × FITEMTYP = 'P'であるBの全件 の件数だけ出したいの?
もし、それでよければ上のSQLででると思いますが(未検証)、
left outer join を使ったほうがわかりやすそう。

from
(((C
left outer join B on B.FITEMTYP = 'P') /* ひょっとしてこれはInner Join? */
left outer join B B2
on C.FPARENTITEMNO = B2.FITEMNO and and (B2.FITEMNO = '123456789'))
/* ひょっとしてこれはInner Join? */
left outer join A on C.FCHILDITEMNO = A.FITEMNO and A.FITEMNO = B.FITEMNO)

こちらも未検証。left outer join B as B2 on・・・でないとだめだったかも。
    • good
    • 0

#1です。

無試験ですが、以下のような感じかと。

select
tbl2.FITEMNO
from
(
select A.FITEMNO
from A, B
where A.FITEMNO = B.FITEMNO
and B.FITEMTYP = 'P'
) tbl1,
(
select C.FCHILDITEMNO
from C, B B2
where
and C.FPARENTITEMNO = B2.FITEMNO
and (B2.FITEMNO = '123456789')
) tbl2
where
tbl2.FCHILDITEMNO = tbl1.FITEMNO(+)


#やっぱり、キーボード入力がらくちん
    • good
    • 0

B、B2が足をひっぱっている。



FromにもSelectを書けます。
AとBを結合し、仮のテーブル1とする。
CとB2(Bのままで良い)を結合し、仮のテーブル2とする。
で、 仮のテーブル2.FCHILDITEMNO = 仮のテーブル1.FITEMNO(+)

仮のテーブルと書いたが、B2で用いたのと同じくエイリアスですよ
    • good
    • 0

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

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