【问题标题】:How to remove duplicate with certain condition如何在特定条件下删除重复项
【发布时间】:2013-02-24 17:47:27
【问题描述】:

我有一个 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

【问题讨论】:

  • 那么问题出在哪里?你试过什么?
  • 我不想成为那种人,但数据库结构看起来确实需要规范化......
  • 这不是真实数据,它只是向你们展示我想要什么的示例,我知道如何删除重复项,但这取决于一列中的重复项。所以我想要检查多个列,如果所有列都相同,则将其删除。
  • 您能否更准确地解释您要删除哪些行?从您的示例中不清楚
  • 您要删除 两行 重复的行,还是要在第一个实例之后删除所有这些行?

标签: mysql sql


【解决方案1】:

这应该可行:

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

【讨论】:

  • 是的,第 3 行和第 6 行相同,我想要完全相同,非常感谢
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2020-03-27
  • 2013-07-14
  • 1970-01-01
  • 2018-06-15
相关资源
最近更新 更多