коррелированный подзапрос SQL нельзя переписать? - PullRequest
0 голосов
/ 08 мая 2020

В книгах SQL всегда есть утверждение, что «некоторые» коррелированные подзапросы можно переписать в последовательные запросы или объединения. Но они никогда не упоминают, что не могут. Какие-нибудь примеры?

1 Ответ

0 голосов
/ 08 мая 2020

Когда строки в коррелированном подзапросе совпадают с несколькими строками во внешнем запросе, тогда довольно сложно написать это без корреляции. Пример:

select a.*,
       (select count(distinct b.x)
        from b
        where b.y = a.y or b.z = a.z
       )
from a;

Вероятно, есть способ записать это без предложения корреляции, но это будет непросто.

Возможно, более простой пример - просто получить "следующий "b после a:

select a.*,
       (select min(b.date)
        from b
        where b.date > a.date            
       )
from a;

Есть способы написать это, но это будет намного сложнее, а наивные методы - дороже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...