SQL Server:将两列与不同值相结合的有效方法



这是一个性能问题,我想在其中组合两个单独的表中的两个列。您如何组合?

我将其理解为or条件,因此

SELECT a.contract1 or b.contract2 from TABLE1 a, TABLE2 b

我的目标是获取一个列,其中每个元素在Table1的Contract1或Table2的Contract2中。or表示法不会区分不同的值和其他值。我需要不同的值。拟议的解决方案,联合方法在许多GB上的大型数据集的起作用缓慢,因为

是基本的。

请提出有效的方法来处理性能。

输入

表A

中的列
1
2
3

表B

1
3
5

想要输出

1
2
3
5

这就是 UNION

SELECT contract1 FROM TABLE1
UNION
SELECT contract2 FROM TABLE2

编辑

您在评论中谈论的性能问题可能是由UNION本身的性质引起的。幕后发生的事情是,DBMS分别执行两个语句,然后在结果集上应用distinct。在大桌子上,后一个步骤可能会导致整体表现问题,您可以通过切换到UNION ALL(不会执行distinct(来确认。

如果您不能选择UNION ALL,因为您不想要重复,我发现这篇有趣的文章提出了解决此类问题的解决方案。它涉及表变量的使用,您可以使用两个语句填充,从您选择的地方获得最终结果。

本质上是步骤

DECLARE @Result TABLE (
  Contract varchar(50)
  — Example of how to declare a PK within a table variable
  PRIMARY KEY ( Contract )
)
INSERT @Result
SELECT Contract1
FROM Table1
INSERT @Result
SELECT Contract2
FROM Table2
SELECT *
FROM @Result

但是您可以在上面的链接上找到一个更详细的解释

相关内容

  • 没有找到相关文章

最新更新