使用联接然后仅使用子查询?

Using joins & then using only a subquery?

好吧,我正在做一些 SQL 修改,我应该对 "use a join and not using a subquery, list the publishers who publish psychology books." 进行查询并得出以下结论:

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 是数据库的 pastebin。

这是架构(我知道有关折扣的架构问题 table,不是我的架构)。

您可以使用 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