【问题标题】:left join on MS SQL 2008 R2在 MS SQL 2008 R2 上左连接
【发布时间】:2012-02-03 17:57:55
【问题描述】:

我正在尝试左连接两个表。表 A 包含唯一的 100 条记录,分别为 field_a_1field_a_2field_a_3field_a_1field_a_2 的组合是独一无二的。

表 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 条记录,而是获得了数百万条记录。这是为什么呢?

【问题讨论】:

  • 我认为你的意思是内连接表。

标签: sql sql-server sql-server-2008 left-join


【解决方案1】:

因为表 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 从 TableA 到 TableB,您将获得与 TableA 记录匹配的每个 TableB 记录的一行 - 即。全部。

你能解释一下你在寻找什么结果吗?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      左连接或内连接并没有真正的区别。 JOIN 将返回与连接条件匹配的所有行。因此,如果表 b 有数百万行与 JOIN 条件匹配,则将返回所有行。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多