我有一个有很多重复记录的表,即 tbl_voter,ID 作为主键,自动递增。还有另一个表 tbl_notes,其中包含每个选民的注释。tbl_notes 可以有每个选民的零个或多个记录。来自 tbl_voter 的 ID 是 tbl_notes 中的外键。
问题是由于选民表中有重复项,注释表中也有重复项。
例如:tbl_voter
ID Name Address
01 abc xyz
02 def pqr
03 abc xyz
04 abc xyz
05 abc xyz
06 def pqr
tbl_notes
Noteid ID Note
A001 01 aaaaaa
A002 02 bbbbbb
A003 01 cccccc
A004 03 dddddd
A005 03 eeeeee
A006 04 ffffff
A007 05 gggggg
A008 01 hhhhhh
我想找到原始 ID 及其重复项的所有 ID,以便更新 tbl_notes
例如:tbl_voter
ID Name Address
01 abc xyz
02 def pqr
tbl_notes
Noteid ID Note
A001 01 aaaaaa
A002 02 bbbbbb
A003 01 cccccc
A004 01 dddddd
A005 01 eeeeee
A006 01 ffffff
A007 01 gggggg
A008 01 hhhhhh
到目前为止,我试图找到重复的记录,但它给了我原始记录和重复记录。我需要一个返回给我的查询:
RealID DuplicateID
01 03
01 04
01 05
02 06
我试过的查询:
select *
from tbl_voter a inner join
(
select id,firstname,lastname,zip,housenumber,COUNT(*) AS dupes from tbl_voter
where riding = '35019'
group by
firstname,lastname,zip,housenumber
having count(*) > 1
) b on a.firstname = b.firstname
and a.lastname = b.lastname
and a.zip = b.zip
and a.firstname is not null
and b.firstname is not null
and a.riding='35019'
and a.housenumber=b.housenumber
order by a.firstname asc
如果我将 ID 添加到 select 查询中,它会抛出一个错误,指出 ID 不能在 group by 查询中使用,这是正确的,因为 ID 总是不同的。
考虑了 ID 的查询:
select a.id as realid, b.id as dupid, a.firstname,a.lastname,a.zip,a.housenumber
from tbl_voter a inner join
(
select id,firstname,lastname,zip,housenumber,COUNT(*) AS dupes from tbl_voter
where riding = '35019'
group by
id,firstname,lastname,zip,housenumber
having count(*) > 1
) b on a.firstname = b.firstname
and a.lastname = b.lastname
and a.zip = b.zip
and a.firstname is not null
and b.firstname is not null
and a.riding='35019'
and a.housenumber=b.housenumber
order by a.firstname asc
如果我得到重复的和真实的 ID,我可以更新 tbl_notes。
谢谢,沙尚克