Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用join&;然后只使用子查询?_Sql_Oracle_Oracle11g_Oracle Sqldeveloper - Fatal编程技术网

Sql 使用join&;然后只使用子查询?

Sql 使用join&;然后只使用子查询?,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'; 下一部分是使用子查询,但我不确定如果不在子查询本身中使用联接,您将如何做到这一点?还有,我如何打印出每一个第二作者 是数

好的,我正在做一些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';
下一部分是使用子查询,但我不确定如果不在子查询本身中使用联接,您将如何做到这一点?还有,我如何打印出每一个第二作者

是数据库的粘贴库

这就是模式(我知道关于折扣表的模式存在问题,而不是我的模式)


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

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

哦,是的,我记得去年做了EXISTS,谢谢。Np:-)看一下最后一个查询的第二个答案,看看这是否能满足您的需要。我得走了,希望能有帮助!另外,您会注意到我遗漏了DISTINCT,因为我不知道在本例中实际需要它。只有在你绝对必要的情况下才使用它,因为你最终会受到性能的影响,并且为了可读性:-)我得走了,祝你好运,祝你有一个美好的一天!哦,是的,我记得去年做了EXISTS,谢谢。Np:-)看一下最后一个查询的第二个答案,看看这是否能满足您的需要。我得走了,希望能有帮助!另外,您会注意到我遗漏了DISTINCT,因为我不知道在本例中实际需要它。只有在你绝对必要的情况下才使用它,因为你最终会受到性能的影响,并且为了可读性:-)我得走了,祝你好运,祝你有一个美好的一天!