Как написать этот Oracle SQL-запрос ТОЛЬКО с использованием подзапроса - PullRequest
0 голосов
/ 21 мая 2018
Table-1 (bk_order_details): order_id, order_line, book_id, quantity, order_price
Table-2 (bk_books): book_id, title
Table-3 (bk_book_topics): book_id, topic_id

Вопрос :

  • Отображение идентификатора и названия книги для всех книг, которые кто-то заказал, и книга классифицируется как книга SQL ибаза данных книги.

  • Используйте topic_id для фильтрации БД и SQL.

  • Сортировать по book_id.

ПРИМЕЧАНИЕ: ТОЛЬКО РАЗРЕШЕНО ИСПОЛЬЗОВАТЬ ПОДПИСЬ.

Заранее спасибо!Я пробовал несколько способов, но не получил желаемого результата.

1 Ответ

0 голосов
/ 21 мая 2018

Если эти значения topic_id являются числами, вам необходимо знать, какие номера topic_id вам нужны.
Или потребуется дополнительная таблица, из которой можно выбрать эти типы 'SQL' и 'DB'.

Fe

Table-4 (bk_topics): topic_id, topic_type

В этом случае приведенный ниже SQL просто использует объединения и подзапрос:

select 
 b.book_id,
 b.title
from bk_book_topics bt
join 
(
   select topic_id 
   from bk_topics
   where (topic_type = 'SQL' or topic_type = 'DB')
   group by topic_id 
) t on (t.topic_id = bt.topic_id)
join bk_order_details o on (o.book_id = bt.book_id)
join bk_books b on (b.book_id = o.book_id)
group by b.book_id, b.title
order by b.book_id

Если этот topic_id не число, а varchar, который имеет тетипы?
А если использование подзапроса разрешено, но не обязательно?
Тогда его можно закодировать в гольф:

select 
 b.book_id,
 b.title
from bk_book_topics bt
join bk_order_details o on (o.book_id = bt.book_id)
join bk_books b on (b.book_id = o.book_id)
where bt.topic_id in ('SQL','DB')
group by b.book_id, b.title
order by b.book_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...