我正在尝试查找潜在的重复记录。例如。 凡如何从4列中有3列具有相同值的表中选择?
- 名字=姓
- 姓氏=姓氏
- DOB = DOB
- 街道地址=街道地址
所以名字,姓氏和出生日期都是一样的。或FirstName,LastName和StreetAddress。或LastName,DOB和SteetAddress。依此类推......
我的客户想要4个值中有3个相同的记录。 这可以在MySql中完成吗?或者我需要在PHP中进行一些处理?
我正在尝试查找潜在的重复记录。例如。 凡如何从4列中有3列具有相同值的表中选择?
所以名字,姓氏和出生日期都是一样的。或FirstName,LastName和StreetAddress。或LastName,DOB和SteetAddress。依此类推......
我的客户想要4个值中有3个相同的记录。 这可以在MySql中完成吗?或者我需要在PHP中进行一些处理?
客户(ID,姓名,出生日期)
要检索具有相同名字的客户ID:
select id
from customer
where firstname in (select firstname
from customer
group by firstname
having count(*)>1);
否则你就必须在自身加入表:
select a.id
from customer a, customer b
where (a.firstname=b.firstname and a.lastname=b.lastname and a.dob=b.dob) or
(a.firstname=b.firstname and a.lastname=b.lastname and a.address=b.address) or
(a.firstname=b.firstname and a.dob=b.dob and a.address=b.address) or
(a.lastname=b.lastname and a.dob=b.dob and a.address=b.address);
只需使用SELECT DISTINCT:
SELECT DISTINCT first, last, dob, street
FROM Your_Table
首先添加索引:
alter table whatever add key(DOB,LastName,FirstName,StreetAddress);
然后看在三个字段,如果你重复的行 - 在这种情况下DOB,FN和LN:
select DOB,LastName,FirstName,StreetAddress from whatever t1
inner join (
select DOB,LastName,FirstName,StreetAddress from whatever
group by DOB,LastName,FirstName,StreetAddress) as t2
on t1.DOB=t2.DOB
and t1.LastName=t2.LastName
and t1.FirstName=t2.FirstName
where t1.StreetAddress != t2.StreetAddress;
寻找其他组合,改变你加入的领域和在哪里条款的字段..
这只给我FirstName是一个匹配。我需要匹配4个中的3个 – David