2013-03-10 114 views
0

我想创建网站和ASIN独特的combokey并删除重复,同时创造有没有办法在发生密钥时删除重复项?

到目前为止,我还 ALTER TABLE产品ADD UNIQUE(网站,ASIN) 我想需要有一个“在复制”,但我无法在http://dev.mysql.com/doc/refman/5.0/en/alter-table.html之内找到正确的事情..有没有人有建议?

+0

该表是否有其他列,使得'SELECT DISTINCT *'仍然会返回'(Site,ASIN)'的重复项? – 2013-03-10 21:19:09

+0

它确实,当前的UNIQUE键在4列 – Jay 2013-03-10 21:21:54

+0

ALTER IGNORE TABLE?有谁知道这会有什么影响? – Jay 2013-03-10 21:22:25

回答

1

我不认为有这样的事情,当添加UNIQUE KEYON DUPLICATE。所以你需要找到一个解决方法。以下是一个建议:

1-识别重复的行并将值存储在临时表中。

CREATE TEMPORARY TABLE Duplicates 
    (SELECT 
    Site, ASIN 
    FROM 
    Products 
    GROUP BY 
    Site, ASIN 
    HAVING 
    COUNT(*) > 1 
    ); 

2-将临时表与原始表连接并删除不再需要的重复行。 (来自我认为你要与SKU IS NULL删除那些评论)

DELETE p 
FROM 
    Products AS p 
INNER JOIN 
    Duplicates AS d 
ON 
    d.Site = p.Site and d.ASIN = p.ASIN 
WHERE 
    p.SKU IS NULL; 

3-创建唯一的密钥:

ALTER TABLE Products ADD UNIQUE KEY (Site, ASIN); 

这里是一个fiddle我创建。

+0

结束运行上面的唯一密钥插入并重新运行爬网程序...但这也起作用。 – Jay 2013-03-11 09:34:44

相关问题