2016-10-02 88 views
0

我有一个表emails和一个表domains。我如何UPDATE电子邮件列设置domain_id这是一个foreign_key到表域。用于查找电子邮件地址域的SQL查询

domain_id domain 
1   google.co.uk 
2   google.com 
3   domain.com 
4   domain.gov.au 

电子邮件

email_id  email       domain_id 
1   [email protected] 
2   [email protected] 
3   [email protected] 
4   [email protected] 

棘手的部分是,电子邮件可以基于顶层域或子域。

+0

*“更新电子邮件列来设置domain_id”*:这是令人困惑的。你想更新两列? – trincot

回答

1

下面是使用LIKE操作

select E.email_id, E.email, D.domain_id 
from Domains D 
Inner Join Emails E 
     ON E.email like concat('%',D.domain,'%') 

上面的查询可以转换为Update声明

2

这里做这件事是一个方法:

update emails e join 
     domains d 
     on e.email like concat('%', d.domain) 
    set e.domain_id = d.id; 

注:这是效率不高,因为它不会使用索引。但对于一次性努力,应该没问题。

相关问题