如果列包含重复数据,则删除行 SQL
Remove row if column contains duplicate data SQL
我的目标是 delete/remove 来自 ma_images table 的任何行,其中包含花药行中相同数据的副本,但要保留 original/first 已复制的数据实例。换句话说,如果第 1 行提到 'image_1.jpg',然后第 3、5 和 6 行也提到 dame data imageNameMaster 列,我想删除实例 3、5 和 6,但保留第一个实例(#1)'
我不擅长 sql 并且已经为此工作了一天,用谷歌搜索,阅读堆栈,研究,还没有找到我可以 understand/relate问题影响解决方案。
下面是我正在使用的 table 减去 table 中的一些额外列的示例。下面是我迄今为止尝试过的 sql 的最新位以及该尝试产生的错误消息。
错误:您不能在 FROM 子句
中为更新指定目标 table 'img'
delete img
from ma_images AS img
where exists (
select 1
from ma_images ref
where ref.ImgNameMaster = img.ImgNameMaster
and ref.ImgID < img.ImgID
)
MySQL 对于在子查询中使用 table 作为 updated/deleted 很挑剔。
最好的解决办法是使用join
:
delete img
from ma_images img JOIN
ma_images ref
on ref.ImgNameMaster = img.ImgNameMaster and
ref.ImgID < img.ImgID;
此版本可能会多次尝试删除同一行。所以,我建议:
delete img
from ma_images img JOIN
(select ref.ImgNameMaster, MIN(ImgId) as min_ImgId
from ma_images ref
group by ref.ImgNameMaster
) ref
on ref.ImgNameMaster = img.ImgNameMaster and
img.ImgID > ref.min_ImgID;
我的目标是 delete/remove 来自 ma_images table 的任何行,其中包含花药行中相同数据的副本,但要保留 original/first 已复制的数据实例。换句话说,如果第 1 行提到 'image_1.jpg',然后第 3、5 和 6 行也提到 dame data imageNameMaster 列,我想删除实例 3、5 和 6,但保留第一个实例(#1)'
我不擅长 sql 并且已经为此工作了一天,用谷歌搜索,阅读堆栈,研究,还没有找到我可以 understand/relate问题影响解决方案。
下面是我正在使用的 table 减去 table 中的一些额外列的示例。下面是我迄今为止尝试过的 sql 的最新位以及该尝试产生的错误消息。
错误:您不能在 FROM 子句
中为更新指定目标 table 'img'delete img
from ma_images AS img
where exists (
select 1
from ma_images ref
where ref.ImgNameMaster = img.ImgNameMaster
and ref.ImgID < img.ImgID
)
MySQL 对于在子查询中使用 table 作为 updated/deleted 很挑剔。
最好的解决办法是使用join
:
delete img
from ma_images img JOIN
ma_images ref
on ref.ImgNameMaster = img.ImgNameMaster and
ref.ImgID < img.ImgID;
此版本可能会多次尝试删除同一行。所以,我建议:
delete img
from ma_images img JOIN
(select ref.ImgNameMaster, MIN(ImgId) as min_ImgId
from ma_images ref
group by ref.ImgNameMaster
) ref
on ref.ImgNameMaster = img.ImgNameMaster and
img.ImgID > ref.min_ImgID;