使用连接然后只使用子查询?

Poe*_*ena 1 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';
Run Code Online (Sandbox Code Playgroud)

接下来的部分是使用子查询来完成它但是我不确定如果不在子查询本身中使用连接,你将如何做到这一点?另外我如何打印每一位作者?

链接是数据库的pastebin.

这是架构(我知道关于折扣表的架构问题,而不是我的架构).

van*_*987 5

您可以使用IN子句:

SELECT 
    p.pub_name
FROM 
    publishers p
WHERE 
    p.pub_id IN (SELECT pub_id FROM titles t WHERE t.category = 'psychology)
Run Code Online (Sandbox Code Playgroud)

或者,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)
Run Code Online (Sandbox Code Playgroud)

获得每一位作者:

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
Run Code Online (Sandbox Code Playgroud)