複数の左結合を実行するSQL Serverのクエリがあります。LEFT JOINは、1対多の関係で最大1行を返します。
...LEFT JOIN foo on a.id = foo.id AND foo.code = 100
アップ、a.id
が繰り返されていないクエリでその結合文に;:ある時点で私はに取得しますa.id
ごとに1行しかありません。しかしテーブルa
とfoo
は1対多の関係を持っているので、その結合ステートメントの後に同じa.id
の複数の行が得られます。
表foo
は、複数のレコードを常に持ちますが、foo.id = a.id
ですが、レコードがある場合とない場合があります。foo.id = a.id AND foo.code = 100
です。そうした場合、そのようなレコードは1つしかありません。ですから、最後のクエリ結果で見たいのは、a.id
ごとに1行だけです。 foo
にf.id = a.id and f.code = 100
のレコードがある場合、そのレコードの日付の値はf.date1
とf.date2
です。 foo
にそのようなレコードがない場合は、f.date1
とf.date2
のNULL値が必要です。コメントから
編集:
それはそのテーブルfoo
が判明、実際a.id = foo.id and foo.code = 100
複数の行を持つことができます。
これはうまくいかないのですか?それはあなたがそこに持っているものに基づいて動作するはずです。 foo.idがNULLの場合の行は、あなたがnull日付1を取得し、date2の –
は多分f.date1 END ELSE THEN NULL SELECT CASEを行いますサンプルデータと所望の結果を提供する。あなたの 'join'はOKです - ' foo'から必要なフィールドだけを 'select'してください... –
してくださいために同じことを行うと一致しないとき、左と一緒に日付1 がそう結合として – sgeddes