要求我查找使用SSMS中的相关子查询撰写了1500页以上的作者。我可以通过联接轻松地做到这一点(下面的查询有效),但是当我尝试将其转换为相关的子查询时却无法完成。可能吗 t.SQLNewbie。
select a.au_id, a.au_lname, a.au_fname, sum(t.pages) as tot_pages
from authors a
join title_authors ta
on ta.au_id = a.au_id
join titles t
on t.title_id = ta.title_id
group by a.au_id, a.au_lname, a.au_fname
having sum(t.pages) > 1500
答案 0 :(得分:0)
类似的事情应该放在球场上
SELECT *
FROM authors a
WHERE EXISTS
(
SELECT 1
FROM title_authors ta
INNER JOIN titles t ON ta.title_id = t.title_id
WHERE ta.author = a.au_id
HAVING sum(t.pages) > 1500
)
答案 1 :(得分:0)
我认为这应该做到,不要加入或分组:
SELECT au_id, au_lname, au_fname
FROM authors
WHERE EXISTS (
SELECT *
FROM title_authors
WHERE au_id = authors.au_id
AND EXISTS (
SELECT *
FROM titles
WHERE title_id = title_authors.title_id
AND pages > 1500
)
)
答案 2 :(得分:0)
鉴于问题的性质,我将不使用exists
,而是进行简单的比较:
SELECT a.*
FROM authors a
WHERE (SELECT SUM(t.pages)
FROM title_authors ta JOIN
titles t
ON ta.title_id = t.title_id
WHERE ta.author = a.au_id
) > 1500;
甚至:
SELECT a.*
FROM authors a
WHERE (SELECT SUM(t.pages)
FROM titles t
WHERE t.title_id IN (SELECT ta.title_id
FROM title_authors ta
WHERE ta.author = a.au_id
)
) > 1500;
这设法使两个相关的子查询成为答案。 。 。当然,是以牺牲可读性为代价的。