这是一个性能问题,我想在其中组合两个单独的表中的两个列。您如何组合?
我将其理解为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
但是您可以在上面的链接上找到一个更详细的解释