2013-09-13 3 views
1

Допустим, у меня есть 2 больших файла csv (более 1 миллиона строк), и оба представляют собой список имен с рангом. Цель состоит в том, чтобы найти одинаковые имена среди обоих списков, уникальные имена для списка 1 и уникальные имена в списке 2.Сравнение двух больших наборов данных или таблиц в mysql

Я хотел сделать это mySQL, поэтому я создал таблицу для каждого списка, но перешел через более миллиона записи в миллион раз кажется неудачным способом сделать это и очень медленно. Как бы вы это сделали?

Это пример, но плохой запрос: http://sqlfiddle.com/#!2/9f272/2

+0

Итак, вы хотите три результата: 1. похожие/похожие имена 2.) уникальные в 1 3.) уникальные в 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; 

EDIT:

Вам нужно создать индексы. Синтаксис синтаксиса:

create index table1_name on table1(name); 
create index table2_name on table2(name); 
+0

Я не ищу счет, имена появляются только один раз в каждом списке, но иногда они находятся в одном списке, а не в другом. –

+0

@DaveLobby. , , Запрос выполнит это. Когда я сталкиваюсь с этой проблемой, я смотрю на подсчеты. Это помогает убедиться, что предположения относительно данных верны. –

+0

Ваше предложение: http://sqlfiddle.com/#!2/9f272/1, и это то, что я хочу, но с лучшим запросом: http://sqlfiddle.com/#!2/9f272/2 –

Смежные вопросы