Напишите SQL-запрос, чтобы найти значения из столбца A в таблице X, которых нет в столбце B таблицы Y - PullRequest
3 голосов
/ 17 июня 2010

Напишите запрос SQL, чтобы найти те значения из столбца A в таблице X, которые НЕ присутствуют в столбце B таблицы Y.

update: запрос занимает слишком много времени, если не (более 5 минут, я не дождался его завершения) Столбец B в таблице Y является первичным ключом.

update: я использую oracle.Размер таблицы в миллионах (строках) для обеих таблиц.Конечно, я использую другое предложение WHERE, что означает, что я сравниваю около 500 000 строк таблицы X с миллионами строк в таблице Y

Ответы [ 3 ]

7 голосов
/ 17 июня 2010

Вы не можете полагаться на NOT IN, если вы любой NULLS в YB

Select A from X where not EXISTS (select * from Y where Y.B = X.A)

Самый безопасный способ вообще NOT EXISTS.OUTER JOIN может дать больше строк, если, скажем, Y является потомком A

2 голосов
/ 17 июня 2010

Есть 4 способа сделать это, о которых я могу подумать.

  • Not In (осторожно с NULL)
  • НАРУЖНОЕ СОЕДИНЕНИЕ и фильтр на NULL (возможно, потребуется добавить DISTINCT)
  • НЕ СУЩЕСТВУЕТ
  • ЗА ИСКЛЮЧЕНИЕМ (для последующего обновления Oracle использует нестандартный оператор MINUS)

Этот последний, похоже, предпочтительный способ сделать это в Oracle, хотя я не могу за это поручиться.

0 голосов
/ 17 июня 2010

Это должно работать:

Select A from X where not A in (select B from Y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...