【发布时间】:2014-02-28 08:26:42
【问题描述】:
我在 Postgres 中有两个表,电子邮件有 10.000.000 行,而 spam_email 有 150.000 行。电子邮件表由普通电子邮件地址组成,如“example@domain.com”、“example1@domain2.com”等,垃圾邮件表由“@domain.com”、“@domain1.com”等地址组成。
我想做的是从 emails 表中找到与 spam_email 表匹配的所有值。 我所做的是这段代码:
Insert INTO clean_email(email)
select distinct email
from email e
join (select email from spam_email) se ON se.email not like s.email
但每次我收到错误disk out of space。
您还有其他解决方案吗? 谢谢
【问题讨论】:
-
你为什么不考虑从 email 表中删除垃圾邮件而不是复制大约。 (10.000.000 - 150.000) 行放入另一个表,即 clean_email?您不会丢失任何数据,因为已删除的数据仍会存在于 spam_email 表中,而 email 表只会存储干净的电子邮件?
-
@zibidyum 谢谢你的想法。我现在试一试,我会告诉你它是否有效。再次感谢
-
我是否理解正确,您希望 clean_emails 包含垃圾邮件表中没有域的电子邮件?
-
@harmic 是的。垃圾邮件表可能包含完整地址以及 example@example_domain.com
-
@zibidyum 即使删除语句也返回错误:设备上没有剩余空间
标签: sql postgresql join sql-like