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

时间:2016-10-02 19:05:54

标签: 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';

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

link是数据库的pastebin。

这就是架构(我已经意识到关于折扣表的架构问题,而不是我的架构。)

1 个答案:

答案 0 :(得分:5)

您可以使用IN子句:

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)

或者EXISTS子句稍微复杂但通常表现更好:

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

获得每一位作者:

rSymPy