mysql - 如何在特定条件下删除重复项

标签 mysql sql

我有一个 mysql 表,我想在特定条件下删除重复项

如果名称、cl_1、cl_2、cl_3、cl_4、cl_5、cl_6 完全相同,我想删除,否则如果其中一个不同且其他列相同,则无需删除。

例如我想删除第 1 行和第 4 行而不是第 7 行

id  name    cl_1    cl_2    cl_3    cl_4    cl_5    cl_6    
--------------------------------------------------------------  
1   name1   T1      T2      T3      T4      T5      T6    (<< Remove)
2   name2   L1      M2      L3      L4      T5      T6
3   name3   T1      T2      T3      T4      T5      T6
4   name1   T1      T2      T3      T4      T5      T6  (<< Remove)
5   name2   T1      T2      T3      T4      T5      T6
6   name3   T1      T2      T3      T4      T5      T6
7   name1   T1      T2      T3      T4      T5      K6  (Not this one)
8   name5   T1      T2      T3      T4      T5      N6
9   name6   T1      T2      T3      T4      T5      H6

最佳答案

这应该有效:

DELETE Y
FROM YourTable Y JOIN 
   (
  SELECT
    name, cl_1, cl_2, cl_3, cl_4, cl_5, cl_6 
  FROM YourTable
  GROUP BY name, cl_1, cl_2, cl_3, cl_4, cl_5, cl_6
  HAVING COUNT(1) > 1
     ) T ON Y.name = T.name 
        AND Y.cl_1 = T.cl_1
        AND Y.cl_2 = T.cl_2
        AND Y.cl_3 = T.cl_3
        AND Y.cl_4 = T.cl_4
        AND Y.cl_5 = T.cl_5
        AND Y.cl_6 = T.cl_6

SQL Fiddle Demo

顺便说一句——第 3 行和第 6 行怎么样?这些看起来完全一样吗?

http://sqlfiddle.com/#!2/26b8b/1

关于mysql - 如何在特定条件下删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15306596/

相关文章:

c# - 在连接 Sql Server 数据库时,Java 和 C# 有什么区别?

sql - OPENROWSET - 文件名中的空格问题

mysql - 输出组与条件语句连接

mysql - Node js mysql结束连接

javascript - PHP MySQL 使用 jQuery 使用包含换行符的文本填充 Textarea

php - 按关联项搜索的 SQL

sql - 根据组内索引更新列

php - 连接 2 个表 ON 2 个字段

mysql - 将表添加到 WordPress 数据库。有什么顾虑吗?

php - 尝试同时执行2个查询: only one works