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

解決済みの質問

3つ以上のテーブルの結合に関して

いろいろな書籍を見ながら試してみましたが
どうも求めている結果が得られませんでした…

ヒントでも構いませんのでアドバイスお願いします。

テーブルの仕様

■テーブル1■
店舗コード日付フィールド1nフィールド2nフィールド3nフィールド4n

■テーブル2■
店舗コード日付フィールド5

■テーブル3■
店舗コード日付フィールド6


2つのテーブルの内部結合や外部結合のSQL文は確認できましたが
3つ以上の記述がテキストにありませんでした。
※もしかしたら2つのテーブルを結合してからかと思いましたが
具体的な方法が思い浮かびませんでした。

オラクルは9g
SQL*PLUS
■その他の条件■
すべてのフィールドが例えNULLでも店舗コードと日付
は表示されるようにする。

INを使用して抽出したい店舗コードのみを表示させたい。
(その場合並び替え順を指定したい場合はINのあとで順番を指定すれば
よろしいでしょうか?)

フィールド1~4までの「n」は同じ種類のフィールドですが区分が10ずつ
あり算術演算子で合計を求めた値のみを表示させます。
そのためASを使用してフィールド名を短くしたいと考えています。

店舗コードと日付は3つのテーブルに共通してありますが
結合した場合は1つづつの表示にしたいです。

大変申し訳ございませんが
宜しくお願いします。

投稿日時 - 2009-09-21 12:24:03

QNo.5307166

すぐに回答ほしいです

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

意味があまり分かりませんがこういうことですか?

<table border><!--/ 親テーブル /-->
<tr><td>
<table><!--/ 子テーブル1 /-->
<tr><td>
■テーブル1■
</td></tr>
</table><!--/ 子テーブル1ここまで /-->
<table><!--/ 子テーブル2 /-->
<tr><td>
■テーブル2■
</td></tr>
</table><!--/ 子テーブル2ここまで /-->
<table><!--/ 子テーブル3 /-->
<tr><td>
■テーブル3■
</td></tr>
</table><!--/ 子テーブル3ここまで /-->
</tr></td>
</table><!--/ 親テーブルここまで /-->

投稿日時 - 2009-09-21 12:35:26

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

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

回答(4)

質問は、3テーブルの外部結合についてではなかったのですか?

とりあえず・・

フィールドの区分を含めた名前が、フィールド1a~1j、2a~2j、3a~3j、4a~4jだとして・・

select
x.店舗コード,
x.フィールド1a+x.フィールド1b+x.フィールド1c+~~+x.フィールド1j "フィールド1n",
x.フィールド2a+x.フィールド2b+x.フィールド2c+~~+x.フィールド2j "フィールド2n",
x.フィールド3a+x.フィールド3b+x.フィールド3c+~~+x.フィールド3j "フィールド3n",
x.フィールド4a+x.フィールド4b+x.フィールド4c+~~+x.フィールド4j "フィールド4n",
y.フィールド5,
z.フィールド6
from テーブル1 x,テーブル2 y,テーブル3 z
where ~

な感じで書けば良いのかと思います。

投稿日時 - 2009-09-21 14:14:46

お礼

再びありがとうございます。

参考にしながらSQL文を完成させましたが

実行は連休明けになってしまいます。

求めている回答を頂けましたので

一度締め切らせて頂きます。

もしまた何かありましたら質問させてください。

投稿日時 - 2009-09-21 22:03:13

select *
from テーブル1 x,テーブル2 y,テーブル3 z
where
x.店舗コード=y.店舗コード(+) and
x.店舗コード=z.店舗コード(+) and
x.店舗コード in (選択したい店舗のカンマ区切りのリスト)
;

な感じで書けば良いかと。

投稿日時 - 2009-09-21 12:50:04

お礼

早速ありがとうございます。

*はすべての列が表示されるとテキストにありました。

フィール1~4に関しましては
それぞれ区分が10個づつあり
例えば
フィールド1(1)+フィールド(2)+…フィールド(10)

と算術演算子で求めた値を戻したいと考えています。
ただ、これでは列名が長くなってしまうので
ASを使用して列名を変更しようと考えています。

テーブルが3つありますので
SELECTの後の列名の前にテーブル名を指定しなくては
ならないと思うのですが
算術演算子で求めるフィールドはそれぞれの区分ことに
テーブル名.を指定するのか
それとも一番最初に列名を指定するのかどちらなのでしょうか?
具体的に言いますと
(1)列名.フィールド(1)+列名.フィールド(2)…+列名.フィールド(10)

なのか

(2)列名.フィールド(1)+フィールド(2)…+フィールド(10)

大変お手数ですが補足を頂けたら幸いです。
宜しくお願いします。

投稿日時 - 2009-09-21 13:26:05

ANo.2

すみません、最後のTRとTDが逆でしたので書き直しました。

<table border><!--/ 親テーブル /-->
<tr><td>
<table><!--/ 子テーブル1 /-->
<tr><td>
■テーブル1■
</td></tr>
</table><!--/ 子テーブル1ここまで /-->
<table><!--/ 子テーブル2 /-->
<tr><td>
■テーブル2■
</td></tr>
</table><!--/ 子テーブル2ここまで /-->
<table><!--/ 子テーブル3 /-->
<tr><td>
■テーブル3■
</td></tr>
</table><!--/ 子テーブル3ここまで /-->
</td></tr>
</table><!--/ 親テーブルここまで /-->

投稿日時 - 2009-09-21 12:37:20

補足

早速ありがとうございます。
すごい助かります。

ただ、表記が解読できませんでした。
TRやTD
等私が参考にしたSQLとは違うようです。

もしよろしければ補足を頂けたら幸いです。

宜しくお願いします。

投稿日時 - 2009-09-21 13:26:37

あなたにオススメの質問