SQL Server:将两列组合成不同值的有效方法?

时间:2017-04-18 12:59:53

标签: sql-server performance sqlperformance

这是一个性能问题,我希望将两个独立的表中的两列组合在一起。你怎么做这个组合?

我将此理解为or条件

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

我的目标是获得一个列,其中每个元素都在Table1的Contract1或Table2的Contract2中。 or表示法不区分不同的值和其他值。我需要不同的价值观。由于底层不同,所提出的解决方案union方法对大量数据集的作用很慢。

请提出有效的方法来处理表现。

输入

  

表A中的列

1
2
3
     

表B中的Golumn

1
3
5

通缉输出

1
2
3
5

1 个答案:

答案 0 :(得分:5)

这就是UNION做的事情

SELECT contract1 FROM TABLE1
UNION
SELECT contract2 FROM TABLE2

修改

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

如果你不能满足于UNION ALL,因为你不想要重复,我发现this interesting article提出了解决这类问题的方法。它涉及到表变量的使用,您可以使用两个语句填充,也可以从中选择以获得最终结果。

基本上步骤是

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

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