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

SQL Server: efficient way to combine two columns to distinct values?

这是一个性能问题,我想合并两个单独表中的两列。怎么组合呢?

我将此理解为 or 条件

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

我的目标是获得单个列,其中每个元素位于 Table1 的 Contract1 或 Table2 的 Contract2 中。 or 表示法不区分不同的值和其他值。我需要不同的价值观。所提出的解决方案,联合方法,由于底层的不同,对超过许多 GB 的大型数据集表现缓慢。

请提出有效的处理方法。

输入

Column in Table A

1
2
3

Golumn in Table B

1
3
5

想要输出

1
2
3
5

这就是 UNION 所做的

SELECT contract1 FROM TABLE1
UNION
SELECT contract2 FROM TABLE2

编辑

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

如果您不能满足于 UNION ALL,因为您不想重复,我发现 this interesting article 提出了针对此类问题的解决方案。它涉及 table 变量的使用,您可以用两个语句填充该变量,并从中 select 获得最终结果。

基本上步骤是

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

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