Sql server 我的左联接返回的行数超出预期
为什么我的左连接返回的行比我预期的多?我尝试了一个内部联接,但它也返回了更多的行Sql server 我的左联接返回的行数超出预期,sql-server,Sql Server,为什么我的左连接返回的行比我预期的多?我尝试了一个内部联接,但它也返回了更多的行 Select h, b, c From table1 t Left join table2 f On table1.a = table2.g 内部联接:当两个表中都有匹配项时,返回行 左联接:返回左表中的所有行,即使右表中没有匹配项。内部联接:当两个表中都有匹配项时返回行 LEFT JOIN:返回左表中的所有行,即使右表中没有匹配项。因此知道您期望的是一对一关系,我猜(正如其他人所说)实际上存在一对多关系 因此
Select h, b, c
From table1 t
Left join table2 f On table1.a = table2.g
内部联接:当两个表中都有匹配项时,返回行
左联接:返回左表中的所有行,即使右表中没有匹配项。内部联接:当两个表中都有匹配项时返回行
LEFT JOIN:返回左表中的所有行,即使右表中没有匹配项。因此知道您期望的是一对一关系,我猜(正如其他人所说)实际上存在一对多关系 因此,您需要一种测试方法:
select table2.g, count(*)
from table2
group by table2.g
having count(*) > 1
所以知道你期望一对一的关系,我猜(正如其他人所说)实际上存在一对多的关系 因此,您需要一种测试方法:
select table2.g, count(*)
from table2
group by table2.g
having count(*) > 1
好吧,请解释一下你的期望,以及你得到了什么。。。。。另外,请显示两个表的示例数据,结果可以让您更清楚地了解您的期望值,例如“对于表1中的每一行,我期望表2中的匹配行数为1或更少”?在执行联接之前,我期望的行数等于表1。1对1关系..但我们不知道什么是
t.a
和f.g
,它们是如何关联的,它们是主键,它们是通过一对一或一对多关系等进行关联的。等等。或者您的联接逻辑不正确,或者表1到表2之间存在1:M的关系。那么-请解释您的预期,而你得到的是。。。。。另外,请显示两个表的示例数据,结果可以让您更清楚地了解您的期望值,例如“对于表1中的每一行,我期望表2中的匹配行数为1或更少”?在执行联接之前,我期望的行数等于表1。1对1关系..但我们不知道什么是t.a
和f.g
,它们是如何关联的,它们是主键,它们是通过一对一或一对多关系等进行关联的。等等。或者您的联接在逻辑上不正确,或者表1到表2之间存在1:M的关系。是的。非常正确。但这两种类型的联接返回的行似乎都比预期的多。OP想知道这是怎么可能的。(内部联接返回的行可能比左联接少一些,但结果可能仍然包含比预期更多的行。)是。非常正确。但这两种类型的联接返回的行似乎都比预期的多。OP想知道这是怎么可能的。(内部联接返回的行可能比左联接少一些,但结果可能仍然包含比预期更多的行。)是。如果应该强制执行1:1关系,则可以在table2
的g
列上创建唯一的约束/索引(除了可能已经存在的外键约束)。当然,只有当您对duplucates的测试查询不会返回任何结果时,这才有效。(应首先解决任何现有的重复项。)是。如果应该强制执行1:1关系,则可以在table2
的g
列上创建唯一的约束/索引(除了可能已经存在的外键约束)。当然,只有当您对duplucates的测试查询不会返回任何结果时,这才有效。(应首先解决任何现有的重复项。)