問題ID:19652について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2021-6-8 14:40
yamadanbira  半人前   投稿数: 10
解説が「完全外部結合であるため」とという書き方しかされていなかったので、イマイチ理解出来ていません。
・c.category,category_name,の下にNULLが付くのか。
・prod_nameの下にNULLが2つ付くのか(1つなら分かります)
この2点が分かりません。

c.categoryは6行まででありその続きはないはずですし、prod_nameも5行までなのでc.categoryと結合するならば、NULLは1つのはずと解釈しています。

上記2点についてどなたかご教授ください。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2021-6-11 17:46
jdnbj  新米   投稿数: 1
>c.categoryは6行まででありその続きはないはずですし、
6行目までです。

>prod_nameも5行までなのでc.categoryと結合するならば、NULLは1つのはずと解釈しています。
prod_name(prod表)は6行目まであり、prod_idが6の行が最終行です。

これをふまえて完全外部結合で表示させると回答の通りになるのかと思います。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2021-6-14 9:05
yamadanbira  半人前   投稿数: 10
返信ありがとうございます。

ですが、やはりNULLが付く理由が分かりません。
prod_nameのNULL2行はc.categoryに合わせて表示されていると考えると納得はいきますが、c.categoryが6行迄しかないはずなのに、その下に何故NULLが入るのか分からないです…
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2021-6-14 9:30 | 最終変更
yokoyama68  一人前   投稿数: 28
長文失礼いたします

結合の種類についてあいまいになっているようです
簡単にまとめます
・内部結合 デフォルトの結合、左右のテーブルで同じ項目を結合する
・外部結合 特殊な結合、左右のテーブルで結合失敗したものも結果を返す
  左側外部結合 左側のテーブルをすべて返す
  右側外部結合 右側のテーブルをすべて返す
  完全外部結合 両方のテーブルをすべて返す

・左テーブルのCATEGORY(6項目)
10
20
30
40
50
60

・右テーブルのCATEGORY(6項目)
10
20
30
40
50
(NULL) ※これも項目です

個々のケースで結果を記載します(項目が多いのでCATEGORYのみ)
・内部結合(結果 5行) ※結合成功したもののみ
10
20
30
40
50

・左側外部結合(結果 6行) ※左テーブルは成功失敗関係なくすべて(失敗の相手先項目はNULL)
10
20
30
40
50
60 この行は右テーブルと結合失敗

・右側外部結合(結果 6行) ※右テーブルは成功失敗関係なくすべて(失敗の相手先項目はNULL)
10
20
30
40
50
(NULL) この行は左テーブルと結合失敗

・完全外部結合(結果 7行) ※左右テーブルの成功失敗関係なくすべて(失敗の相手先項目はNULL)
10
20
30
40
50
60 この行は左テーブルから、右テーブルと結合失敗
(NULL) この行は右テーブルから、左テーブルと結合失敗

以上です
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2021-6-14 11:16
yamadanbira  半人前   投稿数: 10
丁寧なご説明ありがとうございます。
改めて表を見直しcategoryの部分は理解致しました。

category_name,prod_nameのNULLに関しては、結合したcategoryに行を合わせるため表示されているという事でしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2021-6-14 12:07 | 最終変更
yokoyama68  一人前   投稿数: 28
前回の書き込みの内容でテーブルの左右が逆になっておりましので
書き込みを修正しておきました 失礼しました
左テーブル:category
右テーブル:prod
です

SELECTの定義が以下のため、
「SELECT c.category, c.name category_name, p.name prod_name」
各項目は左右のテーブルから以下のように参照されます
CATEGORY    結合キー(左右両方から)
CATEGORY_NAME  左テーブルから
PROD_NAME    右テーブルから


結合失敗したデータの項目は以下のように埋められます
※左テーブルのCATEGORY:60のケース ※右テーブルと結合失敗したため右テーブルの項目は(NULL)になる
CATEGORY    60     左テーブルから
CATEGORY_NAME  stationary 左テーブルから
PROD_NAME    (NULL)   結合失敗のためNULLになる

※右テーブルのCATEGORY:(NULL)のケース ※左テーブルと結合失敗したため左テーブルの項目は(NULL)になる
CATEGORY    (NULL) 右テーブルから この(NULL)は元の値がNULLということです
CATEGORY_NAME  (NULL) 結合失敗したためNULLになる
PROD_NAME    (NULL) 右テーブルから この(NULL)は元の値がNULLということです

以上です
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2021-6-14 14:26
yamadanbira  半人前   投稿数: 10
度々ありがとうございます。
この問題に関してのNULLについては理解致しました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.