Разница между двумя одинаковыми таблицами в MySQL - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть две таблицы, которые определены точно так же, но имеют разное количество строк.Есть пять полей, которые являются частичными ключами таблиц (который является первичным ключом для обеих таблиц).Я хотел найти строки, которые находятся в одной таблице, но нет другой.Я пытался использовать существующий следующим образом, но он не работал.

select * from table1 where not exists (select * from table2)

Эти таблицы имеют точно такой же оператор создания, но имеют разное количество строк.Я не знаю, возможно ли найти разницу с помощью соединений.Спасибо!

1 Ответ

0 голосов
/ 21 сентября 2018

Попробуйте шаблон LEFT JOIN ... IS NULL.

SELECT a.* 
  FROM table1 a
  LEFT JOIN tableb b 
        ON a.f1 = b.f1 
       AND a.f2 = b.f2
       AND a.f3 = b.f3
       AND a.f4 = b.f4
       AND a.f5 = b.f5
 WHERE b.f1 IS NULL

Это работает, потому что LEFT JOIN при нахождении не соответствующей строки в b возвращает данные из a в своем наборе результатов,но возвращает значения NULL для значений в b.

Условие ON выглядит волосатым.Но планировщик запросов знает, что поля проиндексированы, поэтому он поступает правильно.

...