我有一个关系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的重复,因此需要删除该图像及其关系。我认为在某些情况下,某些重复图像可能会丢失关系,在这种情况下,仅应保留一个具有关系的图像。我希望这是有道理的。
答案 0 :(得分:1)
您可以使用聚合函数来获取单个image_id,例如:按term_id,权重的min(image_id)组
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
)