SQL查询以删除重复的行

问题描述 投票:0回答:1

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

诊断:uuid,text,date

患者:uuid,名称

PatientDiagnose:病人,诊断

一名患者当然可以有多个诊断,而两名患者当然可以具有相同的诊断,但是在诊断中,唯一的代表是两个诊断具有不同的用法。因此,在PatientDiagnose中,两个患者分别代表其患者的uuid,每个患者都具有唯一的诊断uuid。

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

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

如何在SQL中做到这一点?

汤米

sql duplicates rows
1个回答
0
投票

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

  • 患者: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)或在手册中查找日期功能。

© www.soinside.com 2019 - 2024. All rights reserved.