2012-02-03 102 views
1

我试图左连接两个表。表A包含具有field_a_1,field_a_2,field_a_3的独特100个记录。 field_a_1field_a_2的组合是唯一的。左加入MS SQL 2008 R2

表B具有数百万条记录和多个字段。 field_b_1field_a_1相同,并且field_b_2field_a_2相同。

我的两个表联合起来是这样的:

select a.*, b.* 
from a 
left join b 
on field_a_1 = field_b_1 
and field_a_2 = field_b_2 

非但没有100条记录,我得到多万条记录。为什么是这样?

+2

我想你的意思是内连接表。 – Malk 2012-02-03 18:03:34

回答

3

因为左连接返回第一个表中的所有行+第二个表中的所有匹配行。您希望得到的数百万匹配行中的哪一行?

4

因为表B有多个行,每个表A条目。

例如:

TableA (ID) 
1 
2 
3  

TableB (ID, data) 
1 hello 
1 world 
1 foo 
1 bar 
2 data 
2 words 
2 more 
3 words 
3 boring 

如果left join从表A至表B,你会得到每一个表B记录是匹配的表A记录行 - 即。他们全部。

你能解释一下你要找的结果吗?

0

左连接或内连接并没有真正有所作为。 JOIN将返回与连接条件匹配的所有行。所以如果表b有数百万行符合JOIN标准的行,那么所有的行都会被返回。

根据您希望完成的事情,您应该考虑使用DISTINCT关键字或GROUP BY来执行聚合函数。