我试图从基于多列的表中查找重复项。我有一个表格,其中包含电子邮件(办公室),电子邮件(个人1)和电子邮件列表。 Email_Personal2,Mobile_Personal1,Mobile_Personal2,FirstName,MiddleName,LastName,CompanyName,Designation等。它有数百万条记录。特定记录有很多重复项。
现在,我想找到使用sql查询的记录,其中列中包含完整值,希望保留此记录并删除所有记录。
select *,count(*) from mytable where first_name!="" group by First_Name,Email_Office,Email_Personal1,Email_Personal2,Personal_Mobile1,Personal_Mobile2 having count(*)>1
但它只显示了一个特定记录,其中包含最后一次计数(*)列中的总出现次数。在上面的查询中指导我如何查看包含所有详细信息以及该特定记录的出现次数的记录?如何保留一个完整的记录并从表中删除所有记录?
我已经删除了“有计数(*)> 1”来查看上面查询中的每条记录,但是它花了很多时间来显示输出,几乎感觉它被绞死了。
select t.* from mytable t inner join (select first_name,middle_name,last_name,designation,company_name,email_office,email_personal1,email_personal2,personal_mobile1,personal_mobile2,count(*) as NoDuplicates from mytable group by first_name,middle_name,last_name,designation,company_name,email_office,email_personal1,email_personal2,personal_mobile1,personal_mobile2 having NoDuplicates > 1) tsum on t.first_name=tsum.first_name and t.Middle_Name=tsum.middle_name and t.Last_Name=tsum.last_name and t.Designation=tsum.designation and t.Company_Name=tsum.company_name and t.Email_Office=tsum.email_office and t.Email_Personal1=tsum.email_personal1 and t.Email_Personal2=tsum.email_personal2 and t.Personal_Mobile1=tsum.personal_mobile1 and t.Personal_Mobile2=tsum.personal_mobile2