Быстрый способ получить разницу в два столбца в MySQL

StackOverflow https://stackoverflow.com/questions/905689

  •  05-09-2019
  •  | 
  •  

Вопрос

как мне получить поля столбца, которые не совпадают с другим столбцом?

Я пытался:

SELECT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title

Он создает много повторяющихся полей, поэтому я сделал:

SELECT DISTINCT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title

но он просто висит.

Любая помощь будет принята с благодарностью, спасибо!

P.S.Я делаю это, чтобы создать список исключений для инструмента Mediawiki MWDumper.Мне это нужно для того, чтобы при импорте выведенного sql мои текущие записи вики не были перезаписаны.

РЕДАКТИРОВАТЬ:Да, это 2 разных стола.У каждого есть около 70 000+ записей также почему мои запросы медленны?Буду признателен, если кто-нибудь разъяснит, чтобы я мог понять, почему :) Еще раз спасибо!

Это было полезно?

Решение

Являются ли a и b разными таблицами, имеющими столбец «page_title»?

Если да, попробуйте следующее:

SELECT DISTINCT page_title FROM a
WHERE page_title NOT IN (SELECT page_title FROM b)

Если вас интересует только удаление дубликатов (если у вас только одна таблица), то есть несколько способов сделать это, два из которых:

SELECT DISTINCT page_title FROM a

или

SELECT page_title FROM a
GROUP BY page_title

Опция GROUP BY более надежна, хотя и медленнее — вы можете добавить предложение HAVING, чтобы выбирать только те заголовки, которые появляются, например.более чем в два раза:

SELECT page_title FROM a
GROUP BY page_title
HAVING COUNT(page_title) > 2

надеюсь, это поможет

(Спасибо Аарону Ф за комментарий)

Другие советы

Вы можете попробовать самостоятельное соединение, которое я использовал раньше, но я не уверен, будет ли это быстрее, поскольку я не использую MySQL.Эта страница может дать вам некоторое представление: http://www.xaprb.com/blog/2006/10/11/how-to-delete-duulate-rows-with-sql/

Небольшое улучшение ответа Ракса:

SELECT DISTINCT a.page_title FROM a
WHERE a.page_title NOT IN (SELECT DISTINCT b.page_title FROM b)

Есть ли в ваших таблицах индекс в столбце page_title?Что говорит план объяснения ваших вопросов?

Я все равно не могу себе представить, что вам нужен индекс, учитывая, что в вашей таблице всего 70 тысяч строк.

Вы можете сделать это с помощью соединения:

SELECT DISTINCT table1.page_title 
FROM table1
LEFT JOIN table2 
    ON table1.page_title = table2.page_title
WHERE table2.page_title is null

Если это медленно, добавьте индекс (table2.page_title)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top