首页 > 解决方案 > sql查询删除重复行

问题描述

我有三张桌子。Diagnose、Patient 和 PatientDiagnose 表格如下所示

诊断:uuid,文本,日期

患者:uuid,姓名

患者诊断:患者uuid,diagnoseuuid

一个患者当然可以有多个诊断,两个患者当然可以有相同的诊断,但是这两个诊断在 Diagnose 中以不同的 uuid 唯一表示。因此,这两名患者在 PatientDiagnose 中使用他们的患者 uuid 表示,并且每个患者都使用那些唯一的诊断 uuid。

现在我发现我想在我的数据库中修复一些东西。我想删除被视为患者重复的诊断。重复项是:如果它们属于同一患者并且具有相同的文本,则在同一年内(在日期上使用年份功能?)并且只保留其中一个诊断完整。

我想删除这些重复项,因为我只想要一个诊断相同文本的 pr 患者,一年。

我怎样才能在 SQL 中做到这一点?

汤米

标签: sqlduplicatesrows

解决方案


您说诊断应仅针对一名患者。但是,您的数据库并不能保证这一点,因此您应该首先解决该问题。那将只剩下两张桌子:

  • 患者:patientuuid,姓名
  • 诊断:diagnoseuuid,文本,日期,patientuuid

一旦你转换了你的表,你就可以轻松地进行清理:

delete from diagnose
where exists
(
  select *
  from diagnose other
  where other.diagnoseuuid  <  diagnose.diagnoseuuid
    and other.text          =  diagnose.text
    and year(other.date)    =  year(diagnose.date)
    and other.patientuuid   =  diagnose.patientuuid
);

您还没有提到您正在使用哪个 DBMS。它可能没有该YEAR功能。在这种情况下,请尝试EXTRACT(YEAR FROM date)或在您的手册中查找日期功能。


推荐阅读