解決済み

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

  • 困ってます
  • 質問No.9238421
  • 閲覧数198
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 76% (200/261)

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.番号"
------------------------------------------------

よろしくお願いします。

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

  • 回答No.2

ベストアンサー率 32% (179/550)

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

お礼率 76% (200/261)

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

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 43% (189/433)

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

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

クエリの基本
http://www.officepro.jp/access/query_ini/
  • 回答No.1

ベストアンサー率 20% (946/4519)

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

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

私は、原則として1が希望です。そのための左結合です。
お礼コメント
yam2012

お礼率 76% (200/261)

参考にさせていただきます。
ありがとうございました。
投稿日時 - 2016-10-12 13:28:20
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ