And*_*gin 8 mysql duplicate-removal delete-row
我有一张桌子:
| foo | bar |
+-----+-----+
| a   | abc |
| b   | def |
| c   | ghi |
| d   | jkl |
| a   | mno |
| e   | pqr |
| c   | stu |
| f   | vwx |
我想按列删除包含重复项的所有行,foo以便表格看起来像这样:
| foo | bar |
+-----+-----+
| b   | def |
| d   | jkl |
| e   | pqr |
| f   | vwx |
什么是最有效的方式做到这一点?
Joh*_*Woo 10
您可以从子查询加入表,该子查询仅返回唯一的foo使用LEFT JOIN.例如,将根据需要删除子查询上没有匹配的行
DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  foo
            FROM    TableName
            GROUP   BY Foo
            HAVING  COUNT(*) = 1
        ) b ON a.Foo = b.Foo
WHERE   b.Foo IS NULL
要获得更快的性能,请在列上添加索引Foo.
ALTER TABLE tableName ADD INDEX(foo)
使用EXISTS:
DELETE a
  FROM TableName a
 WHERE EXISTS (SELECT NULL
                 FROM TableName b
                WHERE b.foo = a.foo
             GROUP BY b.foo
               HAVING COUNT(*) > 1)
使用IN:
DELETE a
  FROM TableName a
 WHERE a.foo IN (SELECT b.foo
                   FROM TableName b
               GROUP BY b.foo
                 HAVING COUNT(*) > 1)
| 归档时间: | 
 | 
| 查看次数: | 1406 次 | 
| 最近记录: |