左テーブルにあるレコードと同じ量のレコードを返すSQLステートメントの記述方法を調べる際に問題があります。右側の表からデータを取得する唯一の方法は、3番目の表を使用することです。右テーブルがリンクテーブルを介して接続されている場合、すべての左テーブルレコードを返す結合
たとえば、3つのテーブル、[サイト]、[アドレス]、および[所属]があります。多くのアフィリエイトは、サイト(連絡先、郵送先住所、オーナー、および公式)に対してアクティブになることができますが、所属に関連付けられている人や住所がない場合があります。 IE。サイトには連絡担当者がいるかもしれませんが、公式に指定されていない場合や、サイトにまだ郵送先住所が割り当てられていない場合があります。 サイト(左側の表)とアフィリエーションは共通のIDでリンクされています。 Sites.ID = Affiliations.Site_ID
提携企業とアドレス(右表)は、共通のアドレスレコードIDによってリンクされている Affiliations.Address_RID = Addresses.RID
私が持っているクエリは
SELECT A.ID,
A.NAME,
C.ADDR_1,
C.CITY_NAME,
C.STATE_CODE,
C.POSTAL_CODE
FROM SITES A,
AFFILIATIONS B,
ADDRESSES C
WHERE A.ID = B.SITE_ID
AND B.ADDRESS_RID = C.RID
AND B.AFFILIATION_TYPE = 'MAILING ADDRESS'
ORDER BY A.ID
です
私がサイトテーブルだけを照会した場合の結果は1580個のサイトレコードです。上記のメールアドレスのクエリを実行すると、私は1386のレコードを取得します。私は、郵送先住所がないレコードについては、すべての1580レコードをnullで返す必要があります。 私は何か間違っていますが、私はそれを見ていません。
コメント?あなたは試してみてください
おかげ
ロジックを2つまたは3つの別々のクエリに分割し、一時テーブルを使用してそれらを結合し、SQLでロジックをはっきりと見ることができるときは、すべてのサブクエリを組み合わせることができます。ちなみに、あなたは現在テーブルに加わっていますが、あなたが参加しているものが明確ではありません。 joinキーワードを使用し、where節に参加しないでください –
サブクエリを使用することが目的のルートになるかどうか疑問に思いました。この例では、実際にフィルタに使用するテーブルが3つあります。 2つの結合テーブル(1580レコード)の条件を満たすサイトのクエリは1になります。 1521の連絡先につながったサイトに基づいて連絡先情報を検索する。 1386レコードを返す郵送用アドレスの場合は1です。 –