Преобразовать в коррелированный подзапрос - PullRequest
0 голосов
/ 23 ноября 2018

Меня просят найти авторов, которые написали более 1500 страниц, используя коррелированный подзапрос в SSMS.Я могу легко сделать это с помощью объединений (приведенный ниже запрос работает), но не могу получить эту работу, когда пытаюсь преобразовать его в коррелированный подзапрос.Это вообще возможно? 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

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Учитывая характер вопроса, я бы не использовал 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;

Это удается получить двакоррелированные подзапросы в ответ.,,по общему признанию, за счет читабельности.

0 голосов
/ 23 ноября 2018

Примерно так должно быть на стадионе:

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
         )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...