【发布时间】:2018-12-14 19:26:38
【问题描述】:
我有一个包含超过 100 万行和多列的 SQLITE3 表,其中之一是“email_address”。 我还有一个单独的列表,其中包含大约 20 万个网络域。
我想从我的表中找到所有包含这些域的电子邮件地址的行。 我可以弄清楚如何使用“从表中选择 * from table where email_address like '%domain';”单独完成。 但是有谁知道我如何在批量级别上做到这一点?
【问题讨论】:
我有一个包含超过 100 万行和多列的 SQLITE3 表,其中之一是“email_address”。 我还有一个单独的列表,其中包含大约 20 万个网络域。
我想从我的表中找到所有包含这些域的电子邮件地址的行。 我可以弄清楚如何使用“从表中选择 * from table where email_address like '%domain';”单独完成。 但是有谁知道我如何在批量级别上做到这一点?
【问题讨论】:
只是猜测表和列的名称。
在 2 个表之间使用连接:
SELECT d.domain, e.email_address
FROM domains as d
INNER JOIN emails as e
ON e.email_address LIKE '%' || d.domain
【讨论】:
你也可以不用 LIKE。类似的东西
select emailAddr,domainName
from email
JOIN domains on substr(emailAddr,instr(emailAddr,'@')+1) = domainName
您可以在电子邮件地址的域部分创建索引,例如
CREATE INDEX emailAddr_idx ON email ( substr(emailAddr,instr(emailAddr,'@')+1) )
我不知道是否有足够大的数据集来测试其功效/影响。
【讨论】:
能够让这个为我工作:
create table final as select * from alladdresses join alldomains on substr(email_address,instr(email_address,'@')+1) = domain;
创建了一个新表,其中包含与我拥有的域匹配的所有地址信息,并添加到仅域的额外列中。 感谢那些让我走上正确道路的人!
【讨论】: