一个例子是最好的解释。假设我有下表:PersonCar(人与汽车的关联nxn)
╔════════════╦═════════════╗ ║ PersonId ║ CarId ║ ╠════════════╬═════════════╣ ║ 1 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 4 ║ ║ 2 ║ 5 ║ ╚════════════╩═════════════╝
如果我按PersonId将此表分组,则ID = 1的人将关联3辆汽车。 我想删除表PersonCar的行,以使最多2个与一个人相关的汽车。我不在乎从协会中删除哪辆车。
这是一个例子。实际上,我有一个很大的测试表,上面放置了太多的关联(用于负载测试),现在,我想通过放置X关联最大值来进行清理。
这是一个oracle数据库。
谢谢您的帮助。
假设表中的组合(person_id, car_id)是唯一的,则可以执行以下操作:
(person_id, car_id)
delete from car_assignment where (person_id, car_id) in (select person_id, car_id from ( select person_id, car_id, row_number() over (partition by person_id order by car_id) as rn from car_assignment ) t where rn > 2);