@4ainik
начинал с бейсика на 286 в 1994

Как исключить одинаковые записи?

Не тривиальная задачка:
В общем есть две таблицы, одинаковые по структуре, но разные по содержанию, т.е. почти разные, очевидно только, что есть отличия (число записей разное), вот нужно собственно узнать масштаб бедствия (различий) для чего собственно и требуется исключить одинаковые записи (т.е. имеющиеся в одновременно в обоих таблицах).
Проблема в том, что число записей около 1 миллиона в каждой таблице :(
Есть ли способ отфильтровать расхождения путем sql запроса? Если есть то как это сделать?
Знаю что есть способ объединения таблиц типа:
select * from t1,t2 inner join ... но это не совсем то да и задача то обратная.
  • Вопрос задан
  • 481 просмотр
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега MySQL
Вот так можно получить данные из таблицы some_table, которых нет в таблице other_table.
SELECT 
    `some_table`.*
FROM 
    `some_table`
     LEFT JOIN `other_table` ON (`other_table`.`id`=`some_table`.`id`)
WHERE 
     `other_table`.`id` IS NULL


Проблема в том, что число записей около 1 миллиона в каждой таблице :(

Это не проблема, особенно если таблица проиндексирована.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@gill-sama
Если структура данных одинаково то стоит воспользоваться
EXCEPT
работает по аналогии с union только наоборот, убирает из выборки пересекающиеся данные, что вам и нужно
Ответ написан
terrier
@terrier
SELECT * FROM t1 LEFT JOIN t2 USING (<some_field>) WHERE t2.<some_field> IS NULL

( и то же для t2 )
JOIN должен выполняться заметно быстрее аналогичного по смыслу EXCEPT ( впрочем проверьте на реальных данных)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы