SQL内部联接重复项

时间:2018-08-01 10:58:22

标签: sql duplicates inner-join ssms

将第三个表添加到查询中时,查询将返回列上的重复项

表A
A.AccId
A.AccNr
A.EntId

表B
B.EntName
B.EntId

表C
C.AccNr
C.CustomerNr

SELECT A.AccID, A.AccNr, A.EntId, B.EntName, B.EntId, C.AccNr,C.CustomerNr, C.EntName
FROM ((Cat.dbo.A
INNER JOIN Cat.dbo.B ON A.EntId = B.EntId)
INNER JOIN Dog.dbo.C ON B.EntName = C.EntName

1 个答案:

答案 0 :(得分:0)

您的查询需要首先更新。我在表C中看不到EntName列。

存在重复的可能性,如果表C中有很多匹配的行,则在与表C联接时重复表A和表B中的行。

如果在C中有许多与EntName匹配的记录,那么您将有重复记录。如果您不想重复,则必须应用DISTINCT

SELECT DISTINCT A.AccID, A.AccNr, A.EntId, B.EntName, B.EntId, C.AccNr,C.CustomerNr
FROM Cat.dbo.Accounts
INNER JOIN Cat.dbo.B ON A.EntId = B.EntId
INNER JOIN Dog.dbo.C ON B.EntName = C.EntName

或者如果重复是由于表C中的重复记录引起的,则可以在JOIN之前将其过滤掉。

SELECT A.AccID, A.AccNr, A.EntId, B.EntName, B.EntId, C.AccNr,C.CustomerNr
FROM Cat.dbo.Accounts
INNER JOIN Cat.dbo.B ON A.EntId = B.EntId
INNER JOIN (SELECT DISTINCT CustomerNr, EntName FROM Dog.dbo.C) AS C ON B.EntName = C.EntName;