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

解決済みの質問

ACCESS SQL 左結合しなければならない理由

ACCESSで作成されたVBAのSQLコードを理解しているのですが、
テーブルAは番号、氏名、住所、年、月、・・・
テーブルBは番号、身長、体重、・・・
という2つのテーブルがあって、
式(1)のSQLでは、
テーブルAにテーブルBを左結合しているのですが、
なぜ左結合しなければならないのかがよく分かりません。

この後、
rst.Open strSQL, CurrentProject.Connection
Do Until rst.EOF
 str氏名 = rst!氏名
 (省略)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
で氏名を取り出しているだけで
テーブルBのフィールドは何も使っていないようなので、

素人の私には、テーブルBを左結合しなくても、
式(2)のSQLでいいように思えるのですが、
式(1)と式(2)で何か違いがあるのでしょうか。

--式(1)----------------------------------------
strSQL = _
"SELECT テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _
"テーブルA.氏名 " & _
"FROM テーブルA LEFT JOIN テーブルB ON テーブルA.番号 = テーブルB.番号 " & _
"GROUP BY テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _
"テーブルA.氏名 " & _
"HAVING テーブルA.年 = '" & 指定年 & "' AND テーブルA.月 = '" & _
指定月 & "' AND テーブルA.住所 = '" & 指定住所 & "' " & _
"ORDER BY テーブルA.年, テーブルA.月, テーブルA.番号"

--式(2)----------------------------------------
strSQL = _
"SELECT テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _
"テーブルA.氏名 " & _
"FROM テーブルA & _
"GROUP BY テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _
"テーブルA.氏名 " & _
"HAVING テーブルA.年 = '" & 指定年 & "' AND テーブルA.月 = '" & _
指定月 & "' AND テーブルA.住所 = '" & 指定住所 & "' " & _
"ORDER BY テーブルA.年, テーブルA.月, テーブルA.番号"
------------------------------------------------

よろしくお願いします。

投稿日時 - 2016-10-05 09:38:36

QNo.9238421

困ってます

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

INNER JOINをすべき所を間違ってLEFT JOINにしているのでなければ、
SELECTの項目、GROUP BY、HAVING、ORDER BY何れにもテーブルBの項目が使われていないので、式(1)のLEFT JOINは不要です。

投稿日時 - 2016-10-05 10:49:18

お礼

やはり、結合は不要ということですね。
なお、「INNER JOINをすべき所を間違って
LEFT JOINにしているのでなければ」と
但し書きが付いているのは、
LEFT JOINではなくINNER JOINであれば、
差異がある(結合する意味がある)ということですね。
ありがとうございました。

投稿日時 - 2016-10-12 13:27:47

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

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

回答(3)

ANo.3

テーブルAは番号、氏名、住所、年、月、・・・
テーブルBは番号、身長、体重、・・・
------------------------------------------
テーブルAの番号は主キーに定義されていますか
通常は1対多の定義です
コーディングの前にリレーションシップとクエリを再確認して下さい

リレーションシップ
http://www.officepro.jp/access/relation/

クエリの基本
http://www.officepro.jp/access/query_ini/

投稿日時 - 2016-10-07 19:29:45

ANo.1

Q、ACCESS SQL 左結合しなければならない理由。
A、例えば、町内の家族一覧リストを作成したい場合

1、世帯主データがあれば、ともかく表示したい。
2、世帯主データと家族データの両方がある場合のみ表示したい。

私は、原則として1が希望です。そのための左結合です。

投稿日時 - 2016-10-05 10:43:50

お礼

参考にさせていただきます。
ありがとうございました。

投稿日時 - 2016-10-12 13:28:20

あなたにオススメの質問