转换为相关子查询

时间:2018-11-23 20:04:42

标签: sql sql-server ssms

要求我查找使用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

3 个答案:

答案 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;

这设法使两个相关的子查询成为答案。 。 。当然,是以牺牲可读性为代价的。