sql - LEFT OUTER JOIN 如何返回比左表中存在的记录更多的记录?

标签 sql sql-server sql-server-2005 tsql

我有一个非常基本的 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 JOIN 将返回左表中与右表(如果可能)连接的所有记录。

如果存在匹配,它仍然会返回所有匹配的行,因此,LEFT 中的一行与 RIGHT 中的两行匹配将作为两行返回,就像 INNER JOIN 一样。

编辑: 为了响应您的编辑,我刚刚进一步查看了您的查询,看起来您只从左表返回数据。因此,如果您只需要 LEFT 表中的数据,并且只希望 LEFT 表中的每一行返回一行,那么您根本不需要执行 JOIN,只需直接从 LEFT 表执行 SELECT 即可。

关于sql - LEFT OUTER JOIN 如何返回比左表中存在的记录更多的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916414/

相关文章:

SQL - 何时使用空的 OVER 子句?

sql - 如何从数据库中获取两种不同的记录类型?

sql - 如何在Sql服务器中将十六进制转换为字符串

Python PYDOBC 使用参数插入 SQL Server DB

SQL Server linux转发

sql - 如何减去总和的负值?

sql - 尝试将两个表从一个数据库迁移到另一个数据库时陷入困境

mysql - 如何重命名 Amazon RDS 托管的 MySQL 数据库实例

sql-server-2005 - 从另一个存储过程调用一个存储过程

sql - 存储过程返回多个结果集