你能帮我mysql查询吗?我想清空所有重复的产品名称,仅保留一行(产品名称及其SKU)。
我这样写查询。您能否确认语法是否正确
UPDATE tvcom_product t1 JOIN
(SELECT name
FROM tvcom_product
GROUP BY name
HAVING count(product_id) > 1) dup ON t1.name = dup.name
SET t1.name = '' WHERE t1.sku != ''
UPDATE tvcom_product t1
JOIN tvcom_product t2 ON t2.name = t1.name AND t2.sku < t1.sku
SET t1.name = ''
这将为name
所有重复的具有相同名称的记录重置。它将仅留下一个具有最小(按字母顺序)SKU的记录。而不是t2.sku < t1.sku
您可以写t2.id < t1.id
-应该是最佳的,它将忽略具有最小ID的记录。
更新。这是最简单但不是最佳的方法。对于巨大的表,此表应更好地工作:
UPDATE tvcom_product t1
JOIN (
SELECT name, MIN(id) id
FROM tvcom_product
GROUP BY name
HAVING COUNT(*) > 1
) t2 ON t1.name = t2.name AND t1.id != t2.id
SET t1.name = ''
如果要进一步优化它,则应将子查询存储在单独的表中并将其联接。当然id
,可以使用来更改此查询sku
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句