假设我有2个大型csv文件(超过100万行),两者都是具有排名的名称列表。目标是在两个列表中找到相同的名称,列表1中的唯一名称和列表2的唯一名称。
我想这样做是mySQL所以我为每个列表创建了一个表,但是循环超过一百万次记录似乎是一种不好的方式,这样做很慢。你会怎么做?
这是一个示例但错误的查询:http://sqlfiddle.com/#!2/9f272/2
答案 0 :(得分:0)
以下内容返回名称在每个表中显示的次数以及计数。如果每个表中的名称都是唯一的,那么它可能会返回如下内容:
InTable1 InTable2 Count
1 0 xxx
0 1 yyy
1 1 zzz
该查询使用union all
和group by
:
select InTable1, InTable2, count(*), min(name), max(name)
from (select name, sum(which = 1) as InTable1, sum(which = 2) as InTable2
from ((select name, 1 as which
from table1
) union all
(select name, 2 as which
from table2
)
) t
group by name
) t
group by InTable1, InTable2;
编辑:
您需要创建索引。这是语法:
create index table1_name on table1(name);
create index table2_name on table2(name);