在MS SQL 2014中将2个表中的列合并到单个表中

时间:2014-11-13 22:31:46

标签: sql-server

我用这个link来帮助我到达我的位置,但现在输出错了。

我有2列,TableA中的ColumnA和表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 MatchA=@InputVal

这会产生输出:

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

2 个答案:

答案 0 :(得分:1)

我想你想加入你的桌子:

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

INNER JOIN只返回匹配的每一行。 LEFT OUTER JOIN(而不是INNER JOIN)将为您提供TableA中的所有行以及TableB中连接成功的值。

现在,您正在使用表格之间的逗号执行CROSS JOIN。

答案 1 :(得分:0)

尝试使用UNION SELECT合并来自两个表的列,如下所示:

SELECT TableB.ColumnB FROM TableB
UNION ALL
SELECT TableA.ColumnA FROM TableA WHERE TableA.MatchA = @InputVal