2016-10-02 8 views
0

私はemailsのテーブルとdomainsのテーブルを持っています。どのようにUPDATEdomain_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; 

注:これははインデックスを使用しないため効率的ではありません。しかし、一度の努力では、それは大丈夫です。

関連する問題