gpt4 book ai didi

mysql - 根据另一个表的内容删除MySQL中的重复行

转载 作者:行者123 更新时间:2023-11-30 22:37:27 24 4
gpt4 key购买 nike

我有一个 MySQL (5.4) 表,其中有些行包含重复字段(有时有 2-5 个副本),我想删除这些行,只留下一个。但这并不只是选择最高或最低的 id 那么简单。我要删除的重复项是那些在另一个表中没有相应条目的重复项。

tb_email_to_membersemail_id(自动递增)和 email_address(以及其他不相关的字段)。例如:

email_id    email_address
-------------------------
1 arnold@foo.com
2 foo@foo.com
3 foo@foo.com
4 foo@foo.com
5 jeanluc@foo.com

tb_txtx_id(自动递增)和 frn_email_id(以及其他不相关的字段),其中 tb_tx.frn_email_idtb_email_to_members.email_id 匹配。例如:

tx_id         frn_email_id
--------------------------
100 5
101 2
102 19
103 19
104 19
105 1

我想删除 tb_email_to_membersemail_address 重复一次或多次的行,但前提是没有包含 frn_email_id 的行tb_tx 来自 tb_email_to_membersemail_id。我需要确保保留一行重复项,即使它们在 tb_tx 中都没有相应的条目。在上面的示例中,我想从 tb_email_to_members 中删除第 3 行和第 4 行,因为 tb_tx 中只存在第 2 行。

(本质上,tb_email_to_members 将电子邮件地址映射到另一个表中的用户帐户,而 tb_tx 将订单映射到来自 tb_email_to_members 的电子邮件地址.)

我可以很容易地找到重复项,而且我看到了很多用于删除重复项的代码,但没有根据从另一个表查找失败而只需要删除某些重复项的调整。有什么建议吗?

最佳答案

@MHardwick 和@ShadowRay 几乎做对了。以下内容还检查以确保电子邮件在 tb_email_to_members

中存在 more tan once
DELETE FROM tb_email_to_members
WHERE email_id NOT IN (SELECT frn_email_id FROM tb_tx)
AND email_address IN (SELECT email_address FROM tb_email_to_members GROUP BY email_address HAVING COUNT(email_address) > 1);

很明显,将 DELETE 更改为 SELECT * 会告诉您究竟要删除什么。

了解 tb 是 tidbits 的缩写,可以加分吗?

关于mysql - 根据另一个表的内容删除MySQL中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082704/

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