2014-04-27 35 views
0

我有一个表是这样的:查找MySQL的重复记录,而不指定的列

**lead_id** **form_id** **field_number** **value** 

1   2   1    Richard 
1   2   2    Garriot 

2   2   1    Hellen 
2   2   2    Garriot 

3   2   1    Richard 
3   2   2    Douglas 

4   2   1    Tomas 
4   2   2    Anderson 

哪里field_number = 1是名字和field_number = 2是姓。

我想找到那些通过名字或姓氏和他们组等于由lead_id条目,所以输出可能是这样的:

1 
2 
3 

如何可以做到这一点有什么想法?

+0

试图分开? –

+0

我不确定您是否已经考虑过您的要求。举一个有限的例子,这确实会返回{1,2,3}。但是对于大型数据库,考虑将发生的爆炸。你的名字{Richard,Hellen}和姓{Garriott,Douglas}。在一个大型数据库中,这也会引入所有其他名字“Hellen”_plus以及所有这些records_中的所有相关姓氏,以及姓氏“Douglas”,_plus与Douglas唱片集合中的任何名字匹配的所有记录。这可能会导致大部分数据库被标记为重复。 –

+0

@ jim-garrison是的,我曾经想过,不幸的是这是客户端要求的功能: – LostCore

回答

0

这应该工作,并合理有效(取决于索引):

select distinct lead_id 
from tablename as t1 
where exists (
    select 1 
    from tablename as t2 
    where t1.field_number = t2.field_number 
    and t1.value = t2.value 
    and t1.lead_id <> t2.lead_id 
) 
+0

嗯,这只是让我在表中的所有lead_id ... – LostCore

+0

它适用于我,离开lead_id = 4:http://sqlfiddle.com/#!2/246fb8/2 – Turophile

+0

好吧,我不得不添加一行,由于field_number列可以有两个以上的值在我的分贝,但它的作品!谢谢!我可以问你为什么'选择1'和't1.field_number = t2.field_number'的东西? – LostCore

0
Select leadid from (
Select DISTINCT leadid,value from tablename 
Where fieldnumber=1 
Group by leadid,value 
Having count(value) >1 
Union all 
Select DISTINCT leadid,value from tablename 
Where fieldnumber=2 
Group by leadid,value 
Having count(value) >1 
) as temp 

肯定有一个更快的选择