gpt4 book ai didi

mysql - 在 MySQL 中查找和删除重复行

转载 作者:行者123 更新时间:2023-11-29 01:56:38 25 4
gpt4 key购买 nike

我在使用以下设置的数据库表中查找重复项时遇到问题:

==========================================================================
| stock_id | product_id | store_id | stock_qty | updated_at |
==========================================================================
| 9990 | 51 | 1 | 13 | 2014-10-25 16:30:01 |
| 9991 | 90 | 2 | 5 | 2014-10-25 16:30:01 |
| 9992 | 161 | 1 | 3 | 2014-10-25 16:30:01 |
| 9993 | 254 | 1 | 18 | 2014-10-25 16:30:01 |
| 9994 | 284 | 2 | 12 | 2014-10-25 16:30:01 |
| 9995 | 51 | 1 | 11 | 2014-10-25 17:30:02 |
| 9996 | 90 | 2 | 5 | 2014-10-25 17:30:02 |
| 9997 | 161 | 1 | 3 | 2014-10-25 17:30:02 |
| 9998 | 254 | 1 | 16 | 2014-10-25 17:30:02 |
| 9999 | 284 | 2 | 12 | 2014-10-25 17:30:02 |
==========================================================================

库存更新每小时导入到此表中,我试图找到重复的库存条目(任何具有匹配产品 ID 和商店 ID 的行),以便我可以删除最旧的。下面的查询是我的尝试,通过在这样的连接上比较产品 ID 和商店 ID,我可以找到一组重复项:

SELECT s.`stock_id`, s.`product_id`, s.`store_id`, s.`stock_qty`, s.`updated_at`
FROM `stock` s
INNER JOIN `stock` j ON s.`product_id`=j.`product_id` AND s.`store_id`=j.`store_id`
GROUP BY `stock_id`
HAVING COUNT(*) > 1
ORDER BY s.updated_at DESC, s.product_id ASC, s.store_id ASC, s.stock_id ASC;

虽然这个查询会起作用,但它不会找到所有重复项,只能找到一组,这意味着如果导入出错并且直到早上才被发现,我们可能会留下大量重复项股票条目。遗憾的是,我缺乏 MySQL 技能,而且我完全不知道如何以快速、可靠的方式查找和删除所有重复项。

欢迎任何帮助或想法。谢谢

最佳答案

您可以使用此查询:

DELETE st FROM stock st, stock st2 
WHERE st.stock_id < st2.stock_id AND st.product_id = st2.product_id AND
st.store_id = st2.store_id;

此查询将删除具有相同 product_idstore_id 的旧记录,并保留最新记录。

关于mysql - 在 MySQL 中查找和删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com