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
这就是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
但你可以找到在链路更详细的解释上述
@hhh注意:'Union all'不会执行一个独立的操作,所以1和3会被重复。有时候你想要这个。既然你不了解工会,我想确保你知道工会的一切。 – xQbert
的可能的复制[“下面的”海誓山盟合并两个表(http://stackoverflow.com/questions/17923643/merge-two-tables-below-eachother) –