首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于删除重复行的Sql查询

用于删除重复行的Sql查询
EN

Stack Overflow用户
提问于 2019-10-22 04:22:29
回答 1查看 59关注 0票数 0

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

诊断: uuid、文本、日期

患者: uuid,姓名

PatientDiagnose:患者,诊断

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

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

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

我如何在SQL中做到这一点呢?

汤米

EN

回答 1

Stack Overflow用户

发布于 2019-10-22 04:38:54

你说一个诊断应该只针对一个病人。然而,您的数据库不能保证这一点,所以您应该首先解决这个问题。这样就只剩下两个表了:

诊断患者:

  • date,姓名

  • 诊断:诊断date,文本,日期,患者date

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

代码语言:javascript
复制
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)或在手册中查找日期函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58493608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档