【问题标题】:How to find duplicate between oracle rows on mutiple columns?如何在多列上的 oracle 行之间查找重复项?
【发布时间】:2018-12-28 20:35:24
【问题描述】:

我在 oracle 中有两个表。我需要在它们的多个列上找到重复项。它不应将空值视为其中任何一个中的重复值。我想要实现的是单行结果,这样我就可以将第一个用户作为 ExistingUser asn 每条在名称、电话或地址方面与其匹配的记录作为 MatchingUsers 列。

我有一个 NAME=MAX ZANEO 的用户,他的电话=123,地址=SesameStreet。然后按 ID 排序,之后我在表中还有两个用户,NAME=NODD A,电话=123,地址=华尔街。姓名=NODD B,电话=345,地址=芝麻街。然后,我希望结果以如下方式提供数据(粗体是列标题,斜体是列数据):ExistingUser=MAX ZANEO,MatchingUsers=NODD A,NODD B,MatchingData=电话、地址

下面是数据来源的查询。

  select
   up.ID
   , ( up.FirstName || ' ' || up.LastName ) as FullName
   , up.Phone
   , up.Email
   , uph.Address
   From
   UserProfile up
   Left Join
   UserProfileHistory uph
  on up.ID =  uph.UserProfileId
   Order by up.Created

Image of Result data of the query above

【问题讨论】:

  • 我没听懂。你能提供一些重复的例子和一些特殊重复的例子(有空值,但你的要求认为是重复的)。我你的例子有重复吗?
  • 弗洛林,你检查过图片和问题吗?我希望你能从中得到一些想法。
  • 请发布格式化文本而不是图像,并编辑您的问题以添加更多信息,而不是试图在 cmets 中解释。显示您尝试与各种场景进行比较的示例数据以及您想要的结果 - 再次以格式化文本的形式显示会很有用。
  • ID 和电话号码在您的数据中是否唯一?
  • 是的。只有这些在我的数据中不重复。有什么方法可以使用它们来查找重复项吗?

标签: oracle oracle11g oracle-sqldeveloper


【解决方案1】:

由于 ID 和电话号码在您的数据中是唯一的,因此请使用自联接,然后您可以将它们的总和用作唯一值。两者总和完全相同的那些行将相似且重复。

 a.Id + b.Id + TO_NUMBER(regexp_replace(a.Phone, '[^[:digit:]]', '')) + TO_NUMBER(regexp_replace(b.Phone, '[^[:digit:]]', '')) as UniqueSum

然后在临时表中使用这个结果并计算它们的行号

row_number() over(partition by  UniqueSum order by Created ) as RowNumber

然后选择最上面的一行:

 where RowNumber = 1

【讨论】:

  • 好主意。这行得通。为什么我没有想到这一点。谢谢
猜你喜欢
  • 2023-01-13
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2020-01-03
  • 2011-12-30
  • 1970-01-01
相关资源
最近更新 更多