2016-10-02 72 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; 

注:這是效率不高,因爲它不會使用索引。但對於一次性努力,應該沒問題。

相關問題