Sql 帮助连接

Sql 帮助连接,sql,join,Sql,Join,我的第一个表有大约18K条记录 所以当我 从表2中选择*我得到大约18k 我正试着做一个如下的连接,但是我得到了大约26K的回复。。我做错了什么?我认为它应该返回所有“正确”的记录,也就是table2记录,并在单独的列中显示与第一个记录匹配的任何值 Select t1.fID , t2.* FROM table1 t1 right join table2 t2 on t1.fName = t2.f 这是我的一张桌子: 表1: fID,fName 表2:id、f、地址等 每当f=fNametab

我的第一个表有大约18K条记录

所以当我

从表2中选择*我得到大约18k

我正试着做一个如下的连接,但是我得到了大约26K的回复。。我做错了什么?我认为它应该返回所有“正确”的记录,也就是table2记录,并在单独的列中显示与第一个记录匹配的任何值

Select t1.fID , t2.*
FROM table1 t1 right join table2 t2 on t1.fName = t2.f
这是我的一张桌子:

表1: fID,fName

表2:id、f、地址等


每当f=fName

table1中有许多行的fName值与表2中的相同值相匹配时,我需要从表2中获取所有记录,其中包含一个fID列

例如,假设5k行table2在table1中没有匹配的行,那么对于剩余的13k table2行,表1中平均有2行


因为您还要求为表1提供一个列,所以会出现这种情况。您将注意到给定t2.fname的多个t1.fId值。或空值

表1中有许多行的fname值与表2中的相同值相匹配

例如,假设5k行table2在table1中没有匹配的行,那么对于剩余的13k table2行,表1中平均有2行


因为您还要求为表1提供一个列,所以会出现这种情况。您将注意到给定t2.fname的多个t1.fId值。或者为空

RIGHT JOIN关键字返回右表(表\u name2)中的所有行,即使左表(表\u name1)中没有匹配项


因此,看起来您没有正确设置匹配条件,或者您没有匹配项。

右JOIN关键字返回右表(表\u name2)中的所有行,即使左表(表\u name1)中没有匹配项


因此,看起来您没有正确设置匹配条件,或者您没有匹配项。

当表2和/或表1中重复某些fName值时,这是可能的

运行这些查询并查看:

SELECT fName, COUNT(1) FROM Table2 GROUP BY fName HAVING COUNT(1) > 1

SELECT fName, COUNT(1) FROM Table1 GROUP BY fName HAVING COUNT(1) > 1

当某些fName值在表2中和/或表1中重复时,这是可能的

运行这些查询并查看:

SELECT fName, COUNT(1) FROM Table2 GROUP BY fName HAVING COUNT(1) > 1

SELECT fName, COUNT(1) FROM Table1 GROUP BY fName HAVING COUNT(1) > 1


如果t1.fName和t2.f不是其表的唯一标识符,您将发现表1中的行与表2中的多行连接。

如果t1.fName和t2.f不是其表的唯一标识符,您将发现表1中的行与表2中的多行连接。

仅供参考,计数(1)没有任何好处。。。我不想再开始了:)。。我只是把它作为一种实践,我不期望它的表现比COUNT(*)更好。仅供参考,COUNT(1)没有任何好处。。。我不想再开始了:)。。我只是将其作为一种实践,我不希望它的性能优于COUNT(*),因此,我如何从表2中获取所有记录,以及表1中的匹配列,如果有一个..@xrum…您希望从哪个匹配行显示列,正如gbn所解释的,有多个匹配的行。@xrum:您得到了这个。除非选择1,否则无法减少行数。汇总并取最小值(t1.fId)或2。决定不使用t1.fIdall@Gerrat-表2有名称和其他信息的所有子项,表1有名称和id,我需要从表2中获取所有信息,但在名称旁边还有一个匹配的id。。。。如果有one@xrum:您需要一种将表2中的一行与表1中的一行进行匹配的方法。除了名称之外,我如何从表2中获取所有记录,以及表1中的一个匹配列,如果有一个..@xrum…您希望从哪个匹配行显示列,如gbn所述,有多个匹配的行。@xrum:您得到了这个。除非选择1,否则无法减少行数。汇总并取最小值(t1.fId)或2。决定不使用t1.fIdall@Gerrat-表2有名称和其他信息的所有子项,表1有名称和id,我需要从表2中获取所有信息,但在名称旁边还有一个匹配的id。。。。如果有one@xrum:除了name@Gerrat,我只需要表2中的18K,如果有匹配的列,则需要表1中的匹配列。基本上,表2有名称,表1有名称和ID,我需要从表2中获取所有信息,但是在名字旁边也有一个匹配的id。。。。如果有,如果ID是不同的,你可以选择不同的,否则你必须决定你想要哪个ID。我很困惑:(所以没有办法得到t2中所有名称的所有可能ID匹配?你得到的是“t2中所有名称的所有可能ID匹配”@Gerrat,我只需要表2中的18K,如果有匹配的列,则需要表1中的匹配列。基本上,表2有名称,表1有名称和id,我需要从表2中获取所有信息,但在名称旁边也有一个匹配的id…如果有,如果id是不同的,您可以选择不同的,否则您必须决定使用哪个id你想要的id我很困惑:(所以没有办法得到t2中所有名字的所有可能id匹配?你得到的是“t2中所有名字的所有可能id匹配”因为右连接从正确的表中获取所有记录,而不管匹配是否存在。因为右连接从正确的表中获取所有记录,而不管匹配是否存在。