这是一个性能问题,我希望将两个独立的表中的两列组合在一起。你怎么做这个组合?
我将此理解为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
答案 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
但您可以在上面的链接中找到更详细的解释