1. ホーム
  2. sql

[解決済み] LEFT OUTER JOINはどのように左のテーブルに存在するよりも多くのレコードを返すことができますか?

2022-04-09 19:21:11

質問

非常に基本的なLEFT OUTER JOINを使用して、左側のテーブルからすべての結果を返し、さらに大きなテーブルからいくつかの追加情報を返しています。左のテーブルには4935レコードがありますが、追加のテーブルにLEFT OUTER JOINすると、レコード数はかなり大きくなります。

私の知る限り、LEFT OUTER JOINは左のテーブルのすべてのレコードと右のテーブルのマッチしたレコードを返し、マッチできなかった行はNULL値を返すというのは絶対的な福音です。

SQLクエリは以下の通りです。

SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum

おそらく、私が構文を間違えたか、LEFT OUTER JOINについての私の理解が不完全なのでしょう。

追記

LEFT OUTER JOINSの理解が深まりました。しかし、このクエリを修正して、左側のテーブルに存在するのと同じ数のレコードしか返されないようにする方法をどなたか教えてください。

このクエリは純粋にレポートを作成するためのもので、重複するマッチは単に問題を混乱させるだけです。

/追記

解決方法は?

LEFT OUTER JOINは、LEFTテーブルのすべてのレコードを、可能な限りRIGHTテーブルと結合して返します。

したがって、LEFT の 1 行が RIGHT の 2 行にマッチした場合、INNER JOIN と同様に 2 つの行が返されます。

EDIT あなたの編集を受け、あなたのクエリをさらに見てみたところ、LEFTテーブルからのデータのみを返しているように見えます。したがって、LEFTテーブルのデータのみが必要で、LEFTテーブルの各行に対して1行だけ返したい場合は、JOINを実行する必要はなく、LEFTテーブルから直接SELECTを実行すればよいのです。