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

5 浏览
0 Comments

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

我有一个非常基本的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的理解上犯了错误,希望有人能解释这种情况是如何发生的。

0
0 Comments

左外连接返回的记录数可能大于左表中的记录数的原因是,右表中的某些记录可能与左表中的多个记录匹配。在左外连接中,左表中的每个记录都会被包含在结果集中,而右表中与左表匹配的记录也会被包含在结果集中。如果右表中的某些记录与左表中的多个记录匹配,则结果集中会出现多个匹配的记录。

解决这个问题的方法是使用DISTINCT关键字来消除结果集中的重复记录。通过在SELECT语句中使用DISTINCT关键字,可以确保结果集中的每个记录只出现一次。这样就可以避免左外连接返回的记录数大于左表中的记录数的情况发生。

下面是一个使用DISTINCT关键字解决左外连接返回多个记录的示例代码:

SELECT DISTINCT *

FROM left_table

LEFT OUTER JOIN right_table

ON left_table.id = right_table.id;

通过在SELECT语句中添加DISTINCT关键字,可以确保结果集中的每个记录只出现一次,即使右表中的某些记录与左表中的多个记录匹配。

总结起来,左外连接返回的记录数可能大于左表中的记录数是因为右表中的某些记录与左表中的多个记录匹配。使用DISTINCT关键字可以解决这个问题,确保结果集中的每个记录只出现一次。

0
0 Comments

LEFT OUTER JOIN返回左表中的所有记录与右表的匹配记录。

如果有匹配的记录,它将返回所有匹配的行,因此,左表中匹配两个右表中的行的一行将返回两个行,就像INNER JOIN一样。

如果您只想要左表中的数据,并且每个左表中的行只想返回一行,则根本不需要执行JOIN,可以直接从左表中进行SELECT查询。

连接到右表的原因是仅在右表中至少有一条记录的情况下才获取左表中的记录,但感谢您对这个问题的解释。

在这种情况下,您应该将查询重写为WHERE EXISTS而不是JOIN。这样做的速度要快得多,因为exists只需要为左表中的每条记录执行单个键查找,而不返回任何数据。

0
0 Comments

左外连接返回的记录数可能多于左表中的记录数的原因是左表中的某些记录在右表中有多个匹配项。解决此问题的方法是在连接条件中添加额外的条件,以确保返回的结果集中只包含左表中的记录。

0