sql 删除双值

sql delete double value

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

我已经准备好使用此查询过滤双精度值:

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

查询结果如下:

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

像这样的东西怎么样:

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)在从您选择的同一个 table 中删除时遇到问题。如果您遇到此问题,请查看答案 of this question

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

  1. 创建 table (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
    

希望对您有所帮助

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

据我所知,您无法从查询 table 中删除数据,只能删除创建 table 脚本中的数据。

以这种方式过滤它的问题是它仍然计算并查看双重数据,因此无论如何都要花费额外的时间才能删除,相反,您可以使用术语 distinct,它只会获取每个唯一值的第一个实例.

还有一个额外的想法,不应该在一个中创建双数据table,主键应该是双数据不应该是可能的。

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