要直接回答您的问题,您可以更改架构,以便从左连接表返回的数据包含在 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,正常化仍然是更好的结构改进。