mysql - 从加权关系数据库中删除重复记录
问题描述
我有一个关系 SQL 数据库,它源自 Tensorflow 图像分类器返回的数据。我相信图像表和关系表中都有大量重复的条目,我想删除它们,同时确保不会破坏任何关系。
例如,这个关系表:
image_id | term_id | weight
1 18 0.95336
2 18 0.49187
2 25 0.35451
3 18 0.84148
3 18 0.84148
3 18 0.84148
4 18 0.84148
5 7 0.25471
应该变成:
image_id | term_id | weight
1 18 0.95336
2 18 0.49187
2 25 0.35451
3 18 0.84148
5 7 0.25471
这个图像表:
ID | file_path | file_name
1 /folder/ imageDog.jpg
2 /folder/ imageMouse.jpg
3 /folder/subfolder/ imageCat.jpg
4 /folder/subfolder/ imageCat.jpg
5 /folder/subfolder/ imageSnake.jpg
应该变成:
ID | file_path | file_name
1 /folder/ imageDog.jpg
2 /folder/ imageMouse.jpg
3 /folder/subfolder/ imageCat.jpg
5 /folder/subfolder/ imageSnake.jpg
请注意,ID 为 4 的图像是 3 的副本,因此需要删除图像及其关系。我认为在某些情况下,一些重复的图像可能会丢失关系,在这种情况下,应该只保留一个具有关系的图像。我希望这是有道理的。
解决方案
您可以使用聚合函数来获取单个 image_id 例如:min(image_id) group by term_id, weight
select min(image_id ) min_id
, term_id
, weight
from my_table
group by term_id, weight
如果你想删除与 min_id 结果无关的路径,你可以使用
delete from your_file_path_table
where ID not in (
select min(image_id )
from my_table
group by term_id, weight
)
推荐阅读
- python - 动态创建导入时的 Python 日志记录模块
- javascript - 打破嵌套的一些或映射 JavaScript
- python-3.x - 我的 python exe 不会运行其他 2 个 python exe
- javascript - 将 javascript 警报显示为 toast
- github - 使用密码创建公共 github 存储库以查看文件
- javascript - Angular 7 httpClient 从 Laravel API 获取响应是字符串
- python - 尝试使用 fork、exec 和 pid wait 在 Python 中编写 Unix 类型的 shell
- python - 为什么我在使用 re.findall() 时总是得到一个空列表?
- java - 使用循环从 int 值打印字符,每行输出所需的数字数量
- c++ - C++ 中的链表数据结构错误