微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除除给定查询获取的记录之外的所有记录

如何解决删除除给定查询获取的记录之外的所有记录

我有两个表 reminderreminder_users,这些表之间有一个外键约束,reminder_users 是子记录。我想要做的是删除这些拖表中的几个冗余行。到目前为止,我设法做的是使用以下查询找到冗余行:

select r.name,r.remark,u.user_id,u.deadline,count (*)
from reminder r 
inner join reminder_users u on r.id = u.reminder_id 
and u.user_id = u.user_id 
and u.deadline = u.deadline having count(*)> 1
group by r.name,u.deadline

因此冗余行与外键id绑定,子记录具有相同的user_id和相同的deadline,父记录具有相同的名称和相同的备注。

having count 子句指出多余的行,但我想保留其中一个记录,以便 count > 1 不再为真,因此我不能在删除中使用此子句-询问。同样为了能够从提醒中删除行,首先必须删除提醒用户的子数据。

我想使用 rowid 和类似 select max (rowid) 之类的东西应该可以以某种方式实现,但我对如何构建删除查询没有进一步的想法。

非常感谢任何帮助!

解决方法

你走在正确的轨道上。您可以通过删除所有 rowid 不是子查询返回的值来delete duplicate rows

delete reminder 
where  rowid not in ( 
  select min ( r.rowid )
  from reminder r 
  inner join reminder_users u 
  on r.id = u.reminder_id 
  and u.user_id = u.user_id 
  and u.deadline = u.deadline 
  group by r.name,r.remark,u.user_id,u.deadline
)

子查询中不需要 having 子句。

注意:这里假设每个 reminder_usersreminder 中都有一行。如果不是这种情况,这也将删除没有用户的提醒,因为子查询不会返回它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。