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

Я смотрю на две таблицы, которые должны быть равны. Я запускаю этот запрос, чтобы увидеть, какие записи отсутствуют в таблице B по сравнению с таблицей A (у нас есть трехколоночный ключ):

      select * 
from tableA A 
left join TableB B 
   on A.joinField1 = B.joinField1 
  and A.joinField2 = B.joinField2 
  and A.joinField3 = B.joinField3 
where B.joinField1 is null 
   or B.joinField2 is null 
   or B.joinField3 is null 

Таким образом, если запись в A отсутствует в B, она будет отфильтрована в этом запросе (на основе ключа). По какой-то причине, когда я случайным образом выбираю одну из этих недостающих записей и ищу ее прямо в таблице B (с помощью простого выбора, отфильтрованного по ключу), она появляется. Почему мой запрос включает их, когда на самом деле есть совпадение? нет нулевых значений и совпадают форматы полей.

1 ответ

Для этого мы можем использовать команду EXCEPT. EXCEPT и EXCEPT ALL возвращают строки, найденные в одном отношении, но не найденные в другом. EXCEPT (или EXCEPT DISTINCT) принимает только отдельные строки, в то время как EXCEPT ALL не удаляет дубликаты из результирующих строк. Обратите внимание, что МИНУС является псевдонимом для EXCEPT. Вы можете ссылаться на ссылку

Другие вопросы по тегам