sql删除双值

时间:2015-02-19 11:06:21

标签: mysql sql select sql-delete

我有一个包含双重数据的数据库,现在我不想删除双数据。

我可以使用此查询过滤掉double值:

SELECT model, count(model), max(product_id) as latest FROM sn1_product GROUP BY model HAVING COUNT(model) > 1

查询的输出如下:

http://puu.sh/g3vyQ/a10cbd0fec.png

如何编写删除最新ID的删除查询?

2 个答案:

答案 0 :(得分:1)

如下:

DELETE FROM `sn1_product` 
WHERE product_id IN (
   SELECT  max(product_id) as latest FROM sn1_product 
   GROUP BY model HAVING COUNT(model) > 1
)

但是,某些数据库(即:MySQL)在您选择的同一个表中删除时会出现问题。如果您遇到此问题,请检查答案of this question

更新:评论中的解决方法:

  1. 创建表格(reference

    CREATE TABLE sn2_product AS
    SELECT * FROM sn1_product;
    
  2. 仅保存您需要的内容(请注意最小功能 - info)。...是其余字段。不要忘记复制非重复文件

    INSERT INTO sn2_product
    SELECT  min(product_id),... FROM sn1_product 
       GROUP BY model HAVING COUNT(model) > 1
    
    INSERT INTO sn2_product
    SELECT  * FROM sn1_product 
       GROUP BY model HAVING COUNT(model) = 1
    
  3. 希望有所帮助

答案 1 :(得分:0)

我无法真正说出这个查询的目的,所以很难给你一个方法来做你想要的事情,但我会尽力帮助你。

据我所知,你无法从查询表中删除数据,只能删除create table脚本中的数据。

以这种方式过滤它的问题是它仍然计算并查看双数据,因此无论如何都需要额外的时间去除,而是你可以使用术语distinct,它只会获取每个唯一值的第一个实例。 / p>

另外一个想法是不可能在一个表中创建双数据,主键应该是双重数据不可能的。

ps:我不是专家,这只是我的想法,如果我错了就很抱歉,并且只是试图提供一些我的知识。