Интересный (вроде простой) SQL запрос?

Давеча на собеседовании задали задачку по поводу следующей выборки:

Есть 2 связанные таблицы. В таблице А хранятся идентификаторы из таблицы В. Необходимо выбрать из таблицы В все записи, идентификаторов которых нет в таблице А.

Сходу написал следующее

SELECT * FROM b WHERE b.id NOT IN (SELECT a.idB FROM a)



Сказали, что можно быстрее с использованием JOIN-ов. Сейчас вот бьюсь уже с час, все мысли левые.


Спасибо за любую подсказку.
  • Вопрос задан
  • 3708 просмотров
Решения вопроса 1
vinxru
@vinxru
select * from b
left outer join a on a.idB = b.id
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Monca
Ну и что же тут интересного?
Узнать ответ дали задание на дом?
Ответ написан
@Jazzist
Я бы обосновал, что с вероятностью > 80% использование действительно простых, а не составных запросов будет эффективнее, и в итоге:

1. Легче пишется
2. Быстрее работает
3. Благодарно кешируется
4. Легче модернизируется
Ответ написан
@ComodoHacker
Можно и по-третьему, и по-четвертому. А как быстрее будет зависеть от СУБД, версии, индексов, объемов и распределения данных и т.д.

Возможно от вас хотели несколько вариантов и умных рассуждений.
Ответ написан
Комментировать
maratfmu
@maratfmu
Посмотрите план выполнения. Он может строиться по разному в зависимости от установленных индексов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы