2017-04-18 64 views
0

這是一個性能問題,我想將兩個獨立表中的兩列組合起來。你怎麼能做到這一點?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://stackoverflow.com/questions/17923643/merge-two-tables-below-eachother) –

回答

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 

但你可以找到在鏈路更詳細的解釋上述

+3

@hhh注意:'Union all'不會執行一個獨立的操作,所以1和3會被重複。有時候你想要這個。既然你不瞭解工會,我想確保你知道工會的一切。 – xQbert

相關問題