查找域名垃圾邮件发送者表格中的电子邮件

时间:2016-11-26 13:20:40

标签: sql postgresql

我有一个包含用户电子邮件(帐户)的表,另一个包含一个临时电子邮件地址域列表(垃圾邮件发送者)。

帐户表

 id |          email          
----+-------------------------
  1 | test111122@example.com
  2 | test1111223@example.com
  3 | test@sharklasers.com

垃圾邮件发送者表

 id  |                 domain                  
-----+-----------------------------------------
   1 | 0-mail.com
   2 | 0815.ru
   3 | sharklasers.com

查询后的结果

 id |          email          
----+-------------------------
  3 | test@sharklasers.com

如何获取“帐户”表中来自垃圾邮件发送者的所有电子邮件?

我知道有许多接受的电子邮件格式,但目前我只对“标准”格式感兴趣。

谢谢!

2 个答案:

答案 0 :(得分:1)

弗兰克施密特有正确的想法,虽然他的方法有点过于宽松,因为它没有考虑到电子邮件中'@'字符的位置。例如,请考虑spam.com是垃圾邮件域。 Frank的查询将捕获来自该域的任何电子邮件,但会抓住完全合法的notspam.com域中的任何用户。

使用类似regexp_replace的内容来确定域名可以解决此问题:

SELECT email
FROM   users u
JOIN   spammers s ON s.domain = REGEXP_REPLACE(u.email, '.*@', '')

<强> SQLFiddle

答案 1 :(得分:0)

您可以使用简单的JOIN进行LIKE搜索(添加@以避免误报,正如@Mureinik所指出的那样):

select email from users u
join spammers s 
  on u.email like '%@' || s.domain;

SQL Fiddle