从重复对中返回选定的重复项

时间:2016-04-11 22:40:12

标签: mysql join duplicates

在最近的一个问题中,我要求进行联接,以获得表格中任何重复对中的所有重复项的列表,我提供了此解决方案:

select t1.*, t2.cnt
from TableA t1
join (
  Select FieldA, FieldB, Count(*) as cnt
  from TableA 
  Group By FieldA, FieldB 
  having count(*) > 1
) as t2 on t1.FieldA = t2.FieldA and t1.FieldB = t2.FieldB

这很有效,我能够提取该列表

但是我现在想进一步细化列表,这样我才能得到结果,其中至少有一对记录有另一个字段(FieldD)不是Null。大多数情况下,这是一个或另一个记录。换句话说,我不想要任何两个记录中FieldD为NULL的对。所以我添加到as t2查询的末尾:

and (t1.FieldD is not NULL Or t2.FieldD is not null)

这几乎可以工作,除了它只返回t1.FieldID不为NULL时的两个记录。当t2.Field是非NULL的记录时,我只得到记录2.

因此,对于原始/内部选择重复查询,我只是为每一对计数获得一条记录,并且使用连接选择我按照预期在每对中获取两条记录,现在我要求一条或者另一个满足fieldD中不为NULL的标准只有当t2.FieldD是NULL时才会得到对中的两个记录。

0 个答案:

没有答案