用于查找电子邮件地址域的SQL查询
问题描述:
我有一个表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]
棘手的部分是,电子邮件可以基于顶层域或子域。
答
下面是使用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
声明
答
这里做这件事是一个方法:
update emails e join
domains d
on e.email like concat('%', d.domain)
set e.domain_id = d.id;
注:这是效率不高,因为它不会使用索引。但对于一次性努力,应该没问题。
*“更新电子邮件列来设置domain_id”*:这是令人困惑的。你想更新两列? – trincot