我用这个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
答案 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