gpt4 book ai didi

MySQL从多个表中查找缺失值的最有效方法

转载 作者:行者123 更新时间:2023-11-29 14:23:05 24 4
gpt4 key购买 nike

我有三个表,第一个是电子邮件地址列表:

addresses:
id - integer, this is the primary key<br>
email - varchar(255) field holding the address

sent:
sid - integer, foreign key references id in addresses table

received:
rid - integer, foreign key references id in addresses table

显然“发送”和“接收”表还有其他列,但它们对于这个问题并不重要。每次发送或接收电子邮件时都会填充发送和接收表,如果该地址尚未在“地址”表中,则会添加该地址。表可能会变得非常大(100,000+)。

定期清除“已发送”和“已接收”表的条目,并因各种原因删除条目,在“地址”表中留下孤立的条目。

我正在寻找 MySQL 中最有效的方法来清除“地址”表中的孤立条目。到目前为止我的查询是:

delete 
from addresses
where id not in
(select rid from received)
and id not in
(select sid from sent);

这可行,但可能需要很长时间才能运行,而且绝对不是最有效的方法!我也尝试过这个:

delete 
from addresses
where not exists
(select 'x' from sent where sent.sid=addresses.id)
and not exists
(select 'x' from rceieved where recieved.rid=addresses.id);

这有点快,但仍然需要很长时间,我怀疑我需要使用 JOIN 语法,但此时我的 sql 知识已经用完了!

最佳答案

这应该可以解决问题

DELETE adresses.* FROM adresses 
LEFT JOIN sent ON sent.sid=adresses.id
LEFT JOIN received ON received.rid=adresses.id
WHERE sent.sid IS NULL AND received.rid IS NULL

关于MySQL从多个表中查找缺失值的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449247/

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