我有下表。数据的唯一区别是 suff,wt ;其余的看起来都一样。
事物表
Prefix Baseletter suff CSCcode Description WT BNO BNO-CSCcode
EIGC A5560 BGA 04020 blah1 0 5560 5560-04020
EIGC A5560 HEA 04020 blah2 17.9 5560 5560-04020
Mapp表
BNO BNO-CSCcode EID Description
5560 5560-04020 4005 blah1
5560 5560-04020 4011 blah2
我正在尝试使用 BNO-CSCcode 加入他们以获取相应的 BNO 的EID。但我的查询返回重复。我得到了4条记录,即使第一张表只有两条记录。
我的SQL查询:
SELECT
Things.Prefix ,
Things.Baseletter,
Things.suff,
Things.CSCcode,
Things.WT,
Mapping.BNO-CSCcode,
Mapping.EID
FROM
Things
INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode
为什么我会收到这些副本,我该如何解决?
答案 0 :(得分:18)
BNO-CSCcode
包含重复项。您将Things
的第一条记录加入Mapp
的两条记录,然后Things
的第二条记录加入Mapp
的两条记录。给你共4条记录。
如果要将这些连接在一起,则需要一些独特的方法来识别表之间的行。
A Distinct应该将其恢复为2条记录:
SELECT DISTINCT
Things.Prefix,
Things.Baseletter,
Things.suff,
Things.CSCcode,
Things.WT,
Mapping.BNO-CSCcode,
Mapping.EID
FROM
Things
INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode
答案 1 :(得分:2)
您正在获得重复项,因为Things
表中的两个记录的BNO-CSCcode
均为5560-04020,Mapp
表中的两个记录也是如此。我能看到的两者之间的唯一区别是Description
字段。因此,如果您使用以下查询:
SELECT Things.Prefix ,Things.Baseletter,Things.suff,Things.CSCcode,Things.WT,Mapping.BNO-CSCcode,Mapping.EID
FROM Things INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode AND
Things.Description = Mapping.Description
......你应该消除重复。
但是,在连接中使用显然是文本字段的字段不是最佳做法,就好像它们是单独的用户生成的,它们不太可能匹配,并且需要更长时间(相对而言)来匹配字段字节数高于字节数低的字节数。
答案 2 :(得分:0)
试试这个
SELECT DISTINCT Prefix,
Baseletter,
suff,
CSCcode,
WT,
BNO_CSCcode,
EID
FROM (
SELECT Things.Prefix AS Prefix,
Things.Baseletter AS Baseletter,
Things.suff AS suff,
Things.CSCcode AS CSCcode,
Things.WT AS WT,
Mapping.BNO - CSCcode AS BNO_CSCcode,
Mapping.EID AS EID
FROM Things
INNER JOIN
Mapping ON Things.BNO - CSCcode = Mapping.BNO - CSCcode
);
答案 3 :(得分:0)
select
A.Code,
B.Code as CustomerBeneficiaryCode,
C.AccountNo as CustomerBeneficiaryBankAccountNo
,COUNT(*) as Duplicate
from Table A
inner join Table B on A.id = B.CustomerIndividualId
inner join Table C on B.Id = C.CustomerBeneficiaryId
group by C.AccountNo,B.Code,A.Code having COUNT(*) > 1