使用联接然后仅使用子查询?
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
好吧,我正在做一些 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