我有一个包含双重数据的数据库,现在我不想删除双数据。
我可以使用此查询过滤掉double值:
SELECT model, count(model), max(product_id) as latest FROM sn1_product GROUP BY model HAVING COUNT(model) > 1
查询的输出如下:
如何编写删除最新ID的删除查询?
答案 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
更新:评论中的解决方法:
创建表格(reference)
CREATE TABLE sn2_product AS
SELECT * FROM sn1_product;
仅保存您需要的内容(请注意最小功能 - 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
希望有所帮助
答案 1 :(得分:0)
我无法真正说出这个查询的目的,所以很难给你一个方法来做你想要的事情,但我会尽力帮助你。
据我所知,你无法从查询表中删除数据,只能删除create table脚本中的数据。
以这种方式过滤它的问题是它仍然计算并查看双数据,因此无论如何都需要额外的时间去除,而是你可以使用术语distinct,它只会获取每个唯一值的第一个实例。 / p>
另外一个想法是不可能在一个表中创建双数据,主键应该是双重数据不可能的。
ps:我不是专家,这只是我的想法,如果我错了就很抱歉,并且只是试图提供一些我的知识。