Oracle 删除所有记录,但由给定查询获取的记录除外

Oracle 删除所有记录,但由给定查询获取的记录除外,oracle,duplicates,sql-delete,record,Oracle,Duplicates,Sql Delete,Record,我有两个表提醒和提醒用户,这些表之间有一个外键约束,提醒用户是子记录。我想做的是删除这两个表中的几个冗余行。到目前为止,我所做的是通过以下查询查找冗余行: 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 =

我有两个表
提醒
提醒用户
,这些表之间有一个外键约束,
提醒用户
是子记录。我想做的是删除这两个表中的几个冗余行。到目前为止,我所做的是通过以下查询查找冗余行:

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, r.remark, u.user_id, u.deadline
因此,冗余行与外键
id
绑定,子记录具有相同的
用户id
和相同的
截止日期
,父记录具有相同的名称和备注

having count
子句指出了多余的行,但我想保留一条记录,这样having count>1就不再是真的了,所以我不能在delete查询中使用此子句。此外,为了能够从提醒中删除行,首先必须删除提醒用户的子数据

我想使用
rowid
和类似于
selectmax(rowid)
的东西应该可以做到这一点,但我不知道如何构造delete查询


任何帮助都是非常感谢的

你在正确的轨道上。您可以通过删除子查询未返回其
rowid
的所有对象:

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
)
子查询中不需要有
子句


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

非常感谢!