2016-02-10 3 views
0

Я пытаюсь найти все непревзойденные строки между двумя таблицами с использованием SQL. Таблица codes содержит 6 миллионов записей, а таблица burnt содержит 1 миллион записей. Я пробовал использовать INSERT INTO SELECT, но это не сработало, оно вышло из строя через некоторое время.Найти непревзойденные строки между таблицами с sql

INSERT INTO unburnt 
SELECT 
    * 
FROM 
    codes T2 
WHERE 
    NOT EXISTS (SELECT * 
     FROM 
      burnt T1 
     WHERE 
      T1.code = T2.code) 

несовпадающие строки должны быть помещены в unburnt таблицу. Каким будет лучший способ справиться с этим запросом?

Структура таблицы базы данных одинакова для всех трех таблиц.

коды

  • ID
  • код (ТЕКСТ)

сожжен

  • ID
  • код (текст)

несгоревшего

  • идентификатор
  • код (ТЕКСТ)
+0

пожалуйста размещаете бы связанные структуры таблиц ('create ta код ")? – 1000111

+0

@SubrataDeyPappu Я отредактировал вопрос, чтобы включить структуры таблиц – zizther

+0

LEFT Объединить коды для сжигания 'union' left join, сгоревшего в коды, поскольку mysql не поддерживает полное внешнее объединение. – xQbert

ответ

0

Попробуйте разорвать ВСТАВКУ в набор небольших вставок:

INSERT INTO unburnt SELECT * .... WHERE T1.code = T2.code and T2.ID between 1 and 100000) 
INSERT INTO unburnt SELECT * .... WHERE T1.code = T2.code and T2.ID between 100001 and 200000) 
etc. 
+0

Вы поднимаете хорошую точку. Я думал, что могу использовать PHP, чтобы идти по строкам и вставлять каждый раз, когда он не соответствует. Мне было интересно узнать, есть ли способ справиться с такими вещами с помощью sql – zizther

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