设置
- 我有两个
List<T>
。 - 数据未归一化并且来自不同来源,这解释了所需逻辑中的卷积
- 数据中的非正式复合键是 fieldA、fieldB、fieldC。
- “字段”是字符串——引用类型——所以它们的值可以为空。我想删除它们可能在 null 上匹配的记录。我得到 C# 中的空引用将匹配,但在 SQL 中它们不匹配。添加一个
!string.IsNullOrEmpty()
很容易。 - 这不是关于数据库设计或关系代数的问题。
- 我有其他逻辑涵盖其他标准。不建议减少显示的逻辑,以免扩大结果集。参见上面的#5。
问题
我想根据非正式键查找 listA 中不在 listB 中的记录。然后,我想根据部分键匹配进一步细化 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