sql - sql查询删除重复行
问题描述
我有三张桌子。Diagnose、Patient 和 PatientDiagnose 表格如下所示
诊断:uuid,文本,日期
患者:uuid,姓名
患者诊断:患者uuid,diagnoseuuid
一个患者当然可以有多个诊断,两个患者当然可以有相同的诊断,但是这两个诊断在 Diagnose 中以不同的 uuid 唯一表示。因此,这两名患者在 PatientDiagnose 中使用他们的患者 uuid 表示,并且每个患者都使用那些唯一的诊断 uuid。
现在我发现我想在我的数据库中修复一些东西。我想删除被视为患者重复的诊断。重复项是:如果它们属于同一患者并且具有相同的文本,则在同一年内(在日期上使用年份功能?)并且只保留其中一个诊断完整。
我想删除这些重复项,因为我只想要一个诊断相同文本的 pr 患者,一年。
我怎样才能在 SQL 中做到这一点?
汤米
解决方案
您说诊断应仅针对一名患者。但是,您的数据库并不能保证这一点,因此您应该首先解决该问题。那将只剩下两张桌子:
- 患者: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)
或在您的手册中查找日期功能。
推荐阅读
- swift - swift:UIScrollView 中的项目不滚动
- tags - 如何在pycharm机器人框架中基于标签运行测试用例
- c# - Xamarin.Android 与控制台应用程序 (Websockets) 通信
- java - 我想在 java 6 中将字符串转换为日期格式
- python - 将字符串拆分为数字(Python)
- gcc - 带有 make/configure gcc 的 Windows 10 中的 OMNET++ 安装错误
- powershell - 有没有办法用唯一的嵌套对象“选择 * -Unique”,而不更改对象?
- scala - 将`@unchecked` 放在哪里来抑制“未检查细化类型上的模式匹配”?
- json - Spring Boot 在 json 中包含 ID 字段
- java - Spring Reactive - 收集一系列分页结果作为所有结果的 Mono