設定
- 私は2つ持ってい
List<T>
ます。 - データは正規化されておらず、さまざまなソースからのものであり、目的のロジックでの畳み込みを説明しています
- データ内の非公式の複合キーは、fieldA、fieldB、fieldCです。
- 「フィールド」は文字列(参照型)であるため、値がnullになる可能性があります。nullで一致する可能性のあるレコードを削除したいと思います。C#のnull参照は一致しますが、SQLでは一致しません。の追加
!string.IsNullOrEmpty()
は簡単です。 - これは、DB設計や関係代数に関する質問ではありません。
- 他の基準をカバーする他のロジックがあります。結果セットを広げる可能性があるように、示されているロジックを減らすことを提案しないでください。上記の#5を参照してください。
問題
非公式キーに基づいて、listBにないlistAのレコードを検索したいと思います。次に、部分的なキーの一致に基づいて、listAの結果をさらに絞り込みます。
問題のSQLバージョン:
select
listA.fieldA, listA.fieldB, matching.fieldC
from listA
left join listB keyList on
listA.fieldA = keyList.fieldA and
listA.fieldB = keyList.fieldB and
listA.fieldC = keyList.fieldC
inner join listB matching on
listA.fieldA = matching.fieldA and
listA.fieldB = matching.fieldB
where
keyList.fieldA is null