#sql #oracle #oracle11g #oracle-sqldeveloper
#sql #Oracle #oracle11g #oracle-sqldeveloper
Вопрос:
Хорошо, итак, я делаю некоторую ревизию SQL, и я должен выполнить запрос, чтобы «использовать соединение, а не использовать подзапрос, перечислить издателей, которые публикуют книги по психологии». и придумал это:
SELECT DISTINCT p.pub_name, t.category
FROM publishers p
INNER JOIN titles t
ON p.pub_id=t.pub_id
WHERE t.category='psychology';
Следующая часть — сделать это с помощью подзапроса, но я не уверен, как вы это сделаете, не используя соединения в самом подзапросе? Кроме того, как мне распечатать каждого второго автора?
Ссылка представляет собой вставку в базу данных.
И это схема (я знаю о проблеме со схемой в отношении таблицы скидок, а не моей схемы).
Ответ №1:
Вы можете использовать предложение IN:
SELECT
p.pub_name
FROM
publishers p
WHERE
p.pub_id IN (SELECT pub_id FROM titles t WHERE t.category = 'psychology)
В качестве альтернативы предложение EXISTS, которое немного сложнее, но обычно работает лучше:
SELECT
p.pub_name
FROM
publishers p
WHERE
EXISTS (SELECT 1 FROM titles t WHERE t.pub_id = p.pub_id AND t.category = 'psychology)
Чтобы получить каждого второго автора:
SELECT
a.au_fname,
a.au_lname
FROM
publishers p
JOIN
titles t ON t.pub_id = p.pub_id
JOIN
title_author ta ON ta.title_id = t.title_id
JOIN
authors a ON a.au_id = ta.au_id
WHERE
t.category = 'psychology'
AND a.au_ord = 2
Комментарии:
1. О, да, я помню, что делал EXISTS в прошлом году, спасибо.
2. Np
Взгляните на последний запрос для второго ответа и посмотрите, дает ли он вам то, что вам нужно. Я должен бежать, но надеюсь, что это поможет! Кроме того, вы заметите, что я пропустил DISTINCT, поскольку я не знаю, что на самом деле требуется в этом случае. Используйте его только в том случае, если вам это абсолютно необходимо, так как в конечном итоге вы получите снижение производительности и удобочитаемости
Мне нужно бежать, но удачи и хорошего дня!