我有两个DB表,每个表都包含电子邮件地址
long
我现在想检查两个表中有多少相同的电子邮件地址。 即两个表格中都有相同的地址。
哪种方法最快: 1.将两个数据集下载为csv,将其加载到内存中并在程序代码中进行比较 2.使用数据库查询获取重叠的结果集。
如果2更好:建议的SQL查询是什么?
答案 0 :(得分:1)
我会选择DBQuery。在两个DB之间建立链接服务器连接(可能在MSSQL端),并使用简单的内部联接查询来生成两个表中出现的电子邮件列表:
select a.emailAddress
from MSDBServ.DB.dbo.Table1 a
join MySqlServ.DB..Table2 b
on a.EmailAddress = b.EmailAddress
找到集合差异,这将需要更多的处理器能力(并且它将产生至少1.4b的结果导致每个匹配MSSQL行的MySql行的最佳情况),但查询实际上不是很不一样。你仍然想要一个连接,但现在你希望该连接返回两个表中的所有记录,无论它们是否可以连接,然后你特别想要未连接的结果(在这种情况下,一边的字段将为null) :
select a.EmailAddress, b.EmailAddress
from MSDBServ.DB.dbo.Table1 a
full join MySqlServ.DB..Table2 b
on a.EmailAddress = b.EmailAddress
where a.EmailAddress IS NULL OR b.EmailAddress IS NULL
答案 1 :(得分:0)
Table1拥有70,000,000个电子邮件地址,table2拥有1,500,000,000个电子邮件地址。我使用Oracle,因此Upper函数在MySQL中可能有也可能没有。
Select EmailAddress from table1 where Upper(emailaddress) in (select Upper(emailaddress) from table2)
比比较电子表格更快,这假设两个表都在同一个数据库中。
答案 2 :(得分:0)
您可以执行SQL查询来检查两个数据库中存在多少个相同的电子邮件地址:第一个数字是重复数量,第二个值是电子邮件地址。
SELECT COUNT(emailAddr),emailAddr FROM table1 A
INNER JOIN
table2 B
ON A.emailAddr = B.emailAddr