首页 > 解决方案 > 转换为相关子查询

问题描述

我被要求找到在 SSMS 中使用相关子查询编写超过 1500 页的作者。我可以使用连接轻松完成此操作(以下查询有效),但当我尝试将其转换为相关子查询时无法完成此工作。甚至可能吗?t.SQL新手。

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

标签: sqlsql-serverssms

解决方案


鉴于问题的性质,我不会使用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;

这设法将两个相关的子查询放入 answer 中。. . 诚然,以可读性为代价。


推荐阅读