SQL查询删除重复的行

时间:2019-10-21 20:22:29

标签: sql duplicates rows

我有三个桌子。 诊断,患者和患者诊断 桌子看起来像这样

诊断: uuid,文本,日期

患者: uuid,名称

PatientDiagnose: 病人,诊断

一个患者当然可以有多个诊断,而两个患者当然可以具有相同的诊断,但是在诊断中唯一代表两个uuid的是两种诊断。因此,在PatientDiagnose中代表这两个患者的患者uuid,每个患者具有唯一的诊断uuid。

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

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

如何在SQL中做到这一点?

汤米

1 个答案:

答案 0 :(得分:0)

您说,诊断应仅指一名患者。但是,数据库不能保证这一点,因此您应该首先解决该问题。那将只剩下两个表:

  • 患者:耐心,名字
  • 诊断:诊断,文本,日期,耐心

这样就转换了表格后,就可以轻松进行清理:

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)或在手册中查找日期函数。