電子書籍の厳選無料作品が豊富!

お世話になります。
次のSQLの結果についてわかられる方がいらっしゃればご回答お願いします。
間違っている部分があるのは承知していますが、ひとまずなぜこういう結果になるのかを教えていただきたいです。

SELECT A.KOUMOKU
FROM A, B, C, D
WHERE A.KOUMOKUNO = B.KOUMOKUNO(+)
AND A.KOUMOKUNO = C.KOUMOKUNO(+)
AND A.KOUMOKUNO = D.KOUMOKUNO(+)

各テーブルのデータは次のようにします。

A
-------------------
KOUMOKUNO KOUMOKU
1         aaa
2         bbb
3         ccc
4         ddd
5         eee
-------------------

B,C,D
-------------------
KOUMOKUNO KOUMOKU
1         aaa
1         aaa
1         aaa
-------------------

この場合、結果が31件となります。
調査した結果、次のような計算をもとに結果が返ってきているようなのです。

Aの4件(Aのみ存在)+(3(Bの件数)×3(Cの件数)×3(Dの件数))=29件

なぜ最後の外部結合でB,C,Dの件数が乗算されるのか教えていただきたいのです。
よろしくお願いします。

A 回答 (1件)

こんにちは。



すこし考えれば、こうなって同然の結果と思います。
> Aの4件(Aのみ存在)+(3(Bの件数)×3(Cの件数)×3(Dの件数))=29件
これは31件の間違いと思いますが、これを以下のように考えるとしっくり来ると思います。
Aの4件(Aのみ存在)+(1(Aの件数)×3(Bの件数)×3(Cの件数)×3(Dの件数))

AとBで7件、これにCが加わって13件、更にDが加わって31件となります。
Aの1件のデータに対してB,C,Dのデータが3件ずつ増えていくのでこうなります。

もし、AのKOUOMKUNOが主キーになっていなくて、1のデータが2件あったら
4+(2×3×3×3)=58件 となります。

逆に、B,C,DのKOUMOKUNOが主キーで1のデータが1件ずつだったら
4+(1×1×1×1)=5件 となるはずです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なんとなくイメージがつかめた気がします。
煮詰まっていたので大変助かりました。
ありがとうございます。

お礼日時:2009/08/26 22:51

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