- ベストアンサー
表の結合について
現在、資格の勉強をしており、その中のSQLについて 分からないことがあります。 作業表((P)作業コード、作業名称) 工数見積表((P)担当者コード、(P)作業コード、見積時間) 作業日程表((P)担当者コード、(P)作業コード、(P)作業年月日、作業時間) (P) は 主キーです。 1つの表に(P)が複数あるときは、すべてあわせて主キーです。 という3つの表をwhere句で結合したいのですが、 問題集の回答にはこのように書いてありました。 (where 句のところだけ抜粋) 作業表をD, 工数見積表をC 作業日程表をB とします。 WHERE B.作業コード=D.作業コード AND B.作業コード=C.作業コード AND B.担当者コード=C.担当者コード 問題集には上記のように書いてありましたが、 それ以外で以下のような結合方法も正しいと言える でしょうか? WHERE B.作業コード=C.作業コード AND B.担当者コード=C.担当者コード AND C.作業コード=D.作業コード どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
D <- B -> C というBを起点にして、双方の結合する考え方なのか B -> C -> D というようにテーブルを辿るのかの違いですが.. 内部結合なので、2つの条件は、全く同じモノであると考えて問題ありません。 ただし、データベースによっては、条件の書き方が、結合の仕方や 効率に影響する場合があり、同じ意味の条件=同じ処理になるとは 限りません。(結果は同じでも、そのプロセスは違う可能性がある) ただ、最近のデータベースのオプティマイザは、賢いので、 そのような書き方の違いを吸収できる可能性はあります。
その他の回答 (1)
- ept63
- ベストアンサー率21% (54/247)
問題の内容は分かりませんが、 先の回答内容を見る限り、 作業日程表を完成させるために工数見積表及び作業表を結合しているものと思われます。 後の回答でもSQLは動作するはずですが、 3行目の値の参照元がメインの表となっていないように思われます。
お礼
ご回答ありがとうございます。 説明が不足しておりまして申し訳ありません。 上の3つの表を結合して、新しい作業実績表(VIEW)を つくるという問題です。 結合する表が2つくらいならどれがメインの表か はっきりするのですが、3つ、4つとなるとわから なくなってしまいます。
お礼
ご回答ありがとうございます。 D は B 、 C 両方の外部キーとなっていたので どちらから参照すればよいのか迷っていましたが、 プロセス(順番)の違いなのですね。すっきりしました。ありがとうございます。