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

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

问题描述:

这是一个性能问题,我想将两个独立表中的两列组合起来。你怎么能做到这一点?SQL Server:将两列组合为不同值的有效方法?

我明白这是or条件,使得

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

在我的目标是获得一个列,其中每个元素是在表1或表2的Contract2的Contract1。表示法不区分不同值和其他值。我需要不同的价值观。所提出的解决方案 - 联合方法由于具有不同的基础,因此在大量数据集上运行缓慢。

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

1 
3 
5 

输入

列在表A中

1 
2 
3 

Golumn通缉输出

1 
2 
3 
5 
+0

的可能的复制[“下面的”海誓山盟合并两个表(http://*.com/questions/17923643/merge-two-tables-below-eachother) –

这就是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 

但你可以找到在链路更详细的解释上述

+3

@hhh注意:'Union all'不会执行一个独立的操作,所以1和3会被重复。有时候你想要这个。既然你不了解工会,我想确保你知道工会的一切。 – xQbert