Mysql 删除3列中包含相同数据,1列中包含不同数据的行

Mysql 删除3列中包含相同数据,1列中包含不同数据的行,mysql,sql,Mysql,Sql,删除3列中包含相同数据,1列中包含不同数据的行 我有一个包含以下列的表:c1、c2、c3、c4、modifyday 我想删除在c1、c2、c3列中包含相同数据,在c4中包含不同数据的行 我已经编写了一个查询来删除列c1、c2、c3中包含相同数据的列,但是我不确定如何检查c4中的数据在这个查询结果中是否不同 delete c1,c2,c3, count( * ) FROM table GROUP BY c1,c2,c3, HAVING count( * ) >1 您可以使用聚合查询连接表

删除3列中包含相同数据,1列中包含不同数据的行

我有一个包含以下列的表:c1、c2、c3、c4、modifyday

我想删除在c1、c2、c3列中包含相同数据,在c4中包含不同数据的行

我已经编写了一个查询来删除列c1、c2、c3中包含相同数据的列,但是我不确定如何检查c4中的数据在这个查询结果中是否不同

delete c1,c2,c3, count( * )
FROM table
GROUP BY c1,c2,c3,
HAVING count( * ) >1 

您可以使用聚合查询连接表,该查询选择具有多个不同
c4
值的
(c1、c2、c3)
记录:

delete t
from mytable t
inner join (
    select c1, c2, c3 from mytable group by c1, c2, c3 having count(distinct c4) > 1
) g on g.c1 = t.c1 and g.c2 = t.c2 and g.c3 = t.c3
使用自联接:

delete t 
from tablename t inner join tablename tt
on tt.c1 = t.c1 and tt.c2 = t.c2 and tt.c3 = t.c3 and tt.c4 <> t.c4 
and tt.modifyday > t.modifyday;
删除t
从tablename t内部连接tablename tt
在tt.c1=t.c1和tt.c2=t.c2和tt.c3=t.c3和tt.c4 t.c4上
和tt.modifyday>t.modifyday;

tt.c4 t.c4
?我猜
tt.c4
,保留其中一行。(但我不知道MySQL。)没有要求保留其中一行(有吗,我错过了?)/好吧,我猜OP只是想去掉太相似的行,即保留一行。我不这么认为。即使是发布的尝试代码也不表示类似的内容。关于该表的另一个详细信息:还有一列名为“modifyday”,我想删除最后一个修改日。是否同时删除这两行/所有行,还是要保留其中一行?我要保留最后一个修改行。分析查询时出错。[Token line number=4,Token line offset=115,Token in error=distinct]@DevApps:这不是MySQL错误消息。您应该直接对数据库运行查询来测试它。