删除记录最少的记录,我有 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 ( ...);