【发布时间】:2010-10-29 07:41:59
【问题描述】:
我有一个非常基本的 LEFT OUTER JOIN 来返回左表中的所有结果以及来自更大表的一些附加信息。左表包含 4935 条记录,但当我将其 LEFT OUTER JOIN 连接到另一个表时,记录数明显增加。
据我所知,LEFT OUTER JOIN 将返回左表中的所有记录以及右表中的匹配记录以及任何无法匹配的行的空值,这是我的理解应该不可能返回比左表中存在的行更多的行,但它的发生都是一样的!
SQL 查询如下:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM SUSP.Susp_Visits LEFT OUTER JOIN
DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
也许我在语法上犯了错误,或者我对 LEFT OUTER JOIN 的理解不完整,希望有人能解释一下这是怎么发生的?
后记
感谢您的精彩回答,我对 LEFT OUTER JOINS 的理解现在好多了,但是有人可以建议一种可以修改此查询的方法,以便我只返回左表中存在的尽可能多的记录吗?
此查询纯粹是为了生成报告,重复匹配只会混淆问题。
/后记
【问题讨论】:
-
要“获取与左表中存在的记录一样多的记录”,如果有多个匹配项,您需要指定从右侧开始选择哪一行。
-
你如何指定这个?我希望返回第一个匹配项。
-
你必须定义第一个匹配的含义。您想要最早的记录,id 最高的记录还是什么?
-
如果与附加表中的主键匹配,则说明正确。
-
在构建查询时,我经常使用this 之类的资源作为备忘单。如果链接失效,只需 google sql join;它们是不同类型连接的维恩图。
标签: sql sql-server sql-server-2005 tsql