删除记录最少的记录,我有2个表人(id,otherID)otherID是其他person.id和film(id,country,personID)的引用,其中personID是人的外键.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,fr,2) 人(1,2) - >因为国家fr,2中的人1的数量比同一国家'fr'中的其他人2(其他ID列)的数量高1。
人(2,2)无需删除
人(3,2)删除其中一个记录电影(3,fr,2)或电影(4,fr,3)因为两者都有fr作为国家和计数= 1但作为记录电影(3,fr) ,2)之前被删除因此必须保留电影(4,fr,3)。
其中count = select 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 = select count(*)over(partition person.id,film.country)
b =选择count(*)over(partition person.otherID,film.country)
a和b同样的film.country然后删除有min(a,b)的记录
答案 0 :(得分:0)
如果您可以编写一个查询,要么标识要删除的行或标识不要删除的行,哪个理想情况下返回一组ROWID,那么您可以简单地:
Delete from my table where rowid in ( ...);
或
Delete from my table where rowid not in ( ...);