2014-11-13 62 views
0

我用這個link來幫助我找到我所在的位置,但是現在我的輸出是錯誤的。將2個表中的列合併到MS SQL 2014中的單個表中

我有2列,來自TableA的ColumnA和來自Table B的ColumnB。我希望TableC包含2列ColumnA和ColumnB。 MatchA和MatchB是相同的。 MatchA在TableA中,MatchB在TableB中。 @InputVal是怎樣的值從ColumnA + B.選擇這裏是我做了什麼:

SELECT ColumnA, ColumnB 
FROM TableA, TableB 
WHERE MatchA=MatchB 
AND [email protected] 

這將產生輸出:

ColumnA ColumnB 
44  Test1 
45  Test1 
46  Test1 
44  Test2 
45  Test2 
46  Test2 
44  Test3 
45  Test3 
46  Test3 

時,從邏輯上講,它應該是:

ColumnA ColumnB 
44  Test1 
45  Test2 
46  Test3 

我該如何糾正我的邏輯來解決這個缺陷?我已經通過了聲明構造的許多變體,我似乎無法將其包圍。 謝謝。

編輯:用戶snow_FFFFFF有解決方案的權利,但只是因爲我遺漏了一個細節而丟失了一部分。

SELECT TableA.ColumnA, TableB.ColumnB 
FROM TableA INNER JOIN TableB ON TableA.MatchA = TableB.MatchB 
AND TableA.SecondMatchA=TableB.SecondMatchB --The change needed 
+0

你想配什麼列? – lookslikeanevo

回答

1

我想你想加入你的表:

SELECT TableA.ColumnA, TableB.ColumnB 
FROM TableA INNER JOIN TableB ON TableA.MatchA = TableB.MatchB 

內部聯接那裏有一個匹配只會返回每個行。 LEFT OUTER JOIN(而不是INNER JOIN)會給你TableA中的所有行和來自TableB中連接成功的值。

現在,您正在使用表格之間的逗號執行CROSS JOIN。

+0

這是我在想什麼,但沒有理解matcha = matchb部分 – lookslikeanevo

+0

我很欣賞這種努力,但是你的解決方案不起作用的原因是我的錯。我忽略了一個必須匹配的次級變量才能使過程正常工作。繼主題之後,解決方案與您相匹配,除了我需要'AND TableA.SecondMatchA = TableB.SecondMatchB'。 – Cory

0

嘗試使用UNION選擇合併列從兩個表如下:

SELECT TableB.ColumnB FROM TableB 
UNION ALL 
SELECT TableA.ColumnA FROM TableA WHERE TableA.MatchA = @InputVal 
相關問題