删除记录最少的记录,我有 2 个表 person (id, otherID) otherID 是其他 person.id 和电影 (id, country, personID) 的引用,其中 personID 是 person.id 的外键
我想删除电影表中与 personID 和 country 相关的记录最少的所有记录。例如:
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)
我必须删除 Film(3, fr, 2) Person(1, 2 )->因为国家 fr, 2 中的人 1 的计数高于同一国家/地区的其他人 2 (otherID 列)的计数' fr',1.
Person(2, 2) 没有可删除的内容
Person(3, 2) 删除了 Film(3, fr, 2) 或 Film(4, fr, 3) 记录之一,因为两者都以 fr 作为国家并且 count = 1 但作为记录 Film(3, fr, 2)之前被删除,因此必须保留 Film(4, fr, 3)。
其中 count = select count(*) over (partition by film.personID, film.country) from film
并保持
Film(1, fr, 1)
Film(2, uk, 1)
Film(4, fr, 3)
Film(5, usa, 1)
Film(6, fr, 1)
实际上,对于 person 表中的每条记录,我们将查找:
a = select count(*) over (partition person.id,film.country)
b = select count(*) over (partition person.otherID,film.country)
a 和 b 相同的 film.country 然后删除具有 min(a,b) 的记录