查询以查找两个字段的重复值

时间:2014-04-24 09:28:01

标签: sql oracle

对不起标题,但不知道如何解释。 我有一个表有2个字段A和B. 我希望找到表中具有重复A(多个记录)的所有行,但同时只有当两个行中的B不同时,A才会认为是重复的。 示例:

   FIELD A        Field B
   10             10
   10             10 // This is not duplicate

   10             10
   10             5 // this is a duplicate

如何在单个查询中使用

2 个答案:

答案 0 :(得分:3)

让我们分解一下如何构建这样的查询。您没有说明是否要查找A或所有行的所有值,但我们最初假设A的所有值。

因此,第一步是创建A的所有值的列表。这可以通过两种方式完成,DISTINCT或GROUP BY。我将使用GROUP BY,因为你还想做什么:

select a
  from your_table
 group by a

这将返回A上唯一的一列。现在,您如何更改此选项以获得独特的价值?最明显的用法是HAVING子句,它允许您限制聚合值。例如,以下内容将为您提供A的所有值,这些值仅在表

中出现一次
select a
  from your_table
 group by a
having count(*) = 1

这就是组内A的所有值的计数为1.您当然不希望这样,您希望使用列B执行此操作。你需要在那里存在多个B的值才能使你想要识别的情况成为可能(如果B只有一个值那么就不可能)。这让我们

select a
  from your_table
 group by a
having count(b) > 1

这仍然不够,因为您需要B的两个不同的值。以上只计算列B的记录数。在聚合函数内部,您可以使用DISTINCT关键字来确定唯一值;把我们带到:

select a
  from your_table
 group by a
having count(distinct b) > 1

要将此转录为英语,这意味着从A中选择YOUR_TABLE中具有多个B值的{{1}}的唯一值。

您可以使用此方法或类似方法在创建查询时构建自己的查询。确定你想要达到的目标并慢慢建立起来。

答案 1 :(得分:-1)

通过具有计数(b)>的FIELD从your_table组中选择FIELD 1

考虑到这将返回所有重复的计数 例 如果你有价值观    1    1    2    1 对于值1而不是2,它将返回3