質問に直接答えるために、左側の結合テーブルから返すデータがSectionAUnresolvedに含まれるように、スキーマを変更できます。これは、次のいずれかの方法で実行できます。
- 適切な列にデータを直接書き込みます。また
- 後でバッチで更新する空の列がある
あなたの質問にはあまり背景がありません。したがって、特定の問題に対する絶対的な答えを与えることは困難です。しかし、一般的にこれがあなたの質問に対する答えになります。
結合を恐れる必要はありません。パフォーマンスが問題になる場合は、キーフィールドのインデックス、ビュー(マテリアライズされているかどうかに関係なく)やパーティション、その他のパフォーマンス向上ツールの使用をお勧めします。
アップデート
@Konstantin-Vasilcovのアイデアは、少し間違っていますが(or、not andを必要とする)、良い可能性のように見えました。
select colums
FROM [SectionAUnresolved] a
left join sectionanotmarkedcounts [all]
on a.director=[all].employee
or a.rm=[all].employee
or a.rep=[all].employee
or a.css=[all].employee
or a.css2=[all].employee
ただし、これによりレコードが乗算され、後でアプリケーションをピボットできる場合は問題ありませんが、使用された関係に関する情報は提供されません。したがって、SectionAUnresolvedテーブルを正規化するスキーマの変更が必要になります。
select ct.type, colums
FROM [SectionAUnresolved] a
left join SectionAUnresolved_countTypes ct
on ct.Unresolvedid = a.id
left join sectionanotmarkedcounts [all]
on ct.employee=[all].employee
どこ:
- ct.type {director、rm、rep、css、css2}
- "ct.Unresolvedid=a.id"-新しいSectionAUnresolved_countTypesテーブルを単一のSectionAUnresolved行にリンクします
結合を2に減らし、結合の数やスキーマの変更を増やすことなく、より多くの「countTypes」を許可します。
アップデート
@ Conrad-Flixのおかげで、caseステートメントを使用して、返された各レコードに使用された結合を判別できます(上記の最初のコードスニペットを参照)。これを行うと、SecionAUnresolvedテーブルをさらに正規化する必要がなくなりますが、パフォーマンスによっては、正規化する必要がある場合があります。
私の知る限り、ケースステートメントは索引付けされておらず、最適化のためにマテリアライズドビューの索引付けが必要になる場合があります。正規化は、IMO、より良い構造改善です。