使用分析函数删除查询



删除记录最少的记录,我有 2 个表 person(id,otherID) otherID 是其他 person.id 和电影(id、国家、personID)的引用,其中 personID 是 person.id 的外键

我想删除电影表中相对于 personID 和国家/地区具有最少记录的所有记录。 例如:

Person(1, 2)
Person(2, 2)
Person(3, 2)
Film(1, fr, 1)
Film(2, uk, 1)
Film(3, fr, 2)
Film(4, fr, 3)
Film(5, usa, 1)
Film(6, fr, 1)

我必须删除 电影(3, 法文, 2)Person(1, 2 )->因为国家/地区 fr 中人员 1 的计数高于同一国家/地区 fr,1 中其他人 2(otherID 列)的计数。

人(2, 2) 没有要删除的内容

人(3, 2)删除其中一条记录Film(3, fr, 2)或Film(4, fr, 3

),因为两者都有fr作为国家和计数= 1,但作为记录Film(3,fr,2)被删除之前,所以必须保留Film(4,fr,3)。

其中 count = 从 film 中选择 count(*) over(按 film.personID, film.country 划分)

并保持

Film(1, fr, 1)
Film(2, uk, 1)
Film(4, fr, 3)
Film(5, usa, 1)
Film(6, fr, 1)

实际上,对于人员表中的每条记录,我们将查找:

a = 选择 count(*) over (分区 person.id,film.country)

b = 选择 count(*) over (分区 person.otherID,film.country)

a和b的同一film.country,然后删除具有min(a,b)的记录

如果可以编写一个查询来标识要删除的行标识要删除的行,并且理想情况下返回一组 ROWID,那么您可以简单地:

Delete from my table where rowid in ( ...);

Delete from my table where rowid not in ( ...);

相关内容

  • 没有找到相关文章

最新更新