Как выбрать только строки, которых нет в другой таблице, без получения данных другой таблицы - PLSQL - PullRequest
3 голосов
/ 04 мая 2020

Я пытаюсь выбрать все строки из одной таблицы с указанным c условием. Я использую Oracle PL SQL.

У меня есть две таблицы:

Книги

  • id
  • имя

Страница

  • идентификатор
  • слова
  • book_id

Одна книга может иметь несколько страниц. Я хочу найти все книги, в которых нет ни одной страницы с 50 словами.

Единственное решение, которое я нашел, - создать левое внешнее соединение, а затем отфильтровать по нулям.

Select * from Books b 
LEFT OUTER JOIN Page p on b.id = p.book_id and p.words = 50
where p.words is null

Я думаю, что это не очень хорошее решение, но оно работает, знаете ли вы какой-нибудь другой способ сделать это?

Я не хочу получать какую-либо информацию о Pages. Если я создаю нормальное соединение и затем применяю условие, я получаю N строк для Книги и хочу получить только 1 строку для каждой Книги

Спасибо.

1 Ответ

1 голос
/ 04 мая 2020

Вы можете настроить select так, чтобы оно было b.*.

Возможно, более распространенной альтернативой является not exists:

select b.*
from Books b 
where not exists (select 1
                  from Page p 
                  where b.id = p.book_id and p.words = 50
                 );

Оба метода должны иметь одинаковую производительность характеристики.

...