2016-10-02 4 views
1

Итак, я делаю некоторую ревизию 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'; 

Следующая часть, чтобы сделать это с помощью подзапроса, но я не уверен, как вы могли бы сделать, что без использования соединений в самом подзапрос? Также как я буду печатать каждый второй автор?

link является пастебином в базе данных.

И это схема (я знаю о проблеме со схемой в отношении таблицы скидок, а не о моей схеме).

ответ

5

Вы можете использовать в операторе:

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 
+0

О, да, я помню, как я делал EXISTS в прошлом году, спасибо. – Poena

+1

Np :-) Взгляните на последний запрос для второго ответа и посмотрите, достает ли он вам то, что вам нужно. Я должен бежать, но надеюсь, что это поможет! Кроме того, вы заметите, что я оставил DISTINCT, поскольку я не знаю, что на самом деле требуется в этом случае. Используйте его только в том случае, если вам абсолютно необходимо, так как вы в конечном итоге получаете удар производительности и удобочитаемости :-) Мне нужно бежать, но удачи и отличного дня! – vanlee1987

Смежные вопросы