2016-09-21 94 views
2

我正在尝试查找潜在的重复记录。例如。 凡如何从4列中有3列具有相同值的表中选择?

  • 名字=姓
  • 姓氏=姓氏
  • DOB = DOB
  • 街道地址=街道地址

所以名字,姓氏和出生日期都是一样的。或FirstName,LastName和StreetAddress。或LastName,DOB和SteetAddress。依此类推......

我的客户想要4个值中有3个相同的记录。 这可以在MySql中完成吗?或者我需要在PHP中进行一些处理?

回答

0

客户(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); 
+0

这只给我FirstName是一个匹配。我需要匹配4个中的3个 – David

1

只需使用SELECT DISTINCT:

SELECT DISTINCT first, last, dob, street 
FROM Your_Table 
0

首先添加索引:

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; 

寻找其他组合,改变你加入的领域和在哪里条款的字段..

相关问题