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. Вы можете ссылаться на ссылку