Связь между подзапросами в SQL - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь выяснить, существует ли какой-либо механизм, с помощью которого вы можете напрямую (не используя некоторые другие механизмы) передавать некоторые данные между двумя подзапросами в большом запросе, например:

select CustomerID, (select PostalCode from Customers where ContactName = S2.ContactName)
from Customers
where ContactName in (select ContactName
                        from Customers where City = 'London') S2

Где я хочу использовать данные из S2 в первом подзапросе.

Примечание: приведенный выше запрос не должен возвращать ничего значащего, мой запрос только о том, как SQL sub -запросы работают.

Ответы [ 2 ]

1 голос
/ 26 января 2020

Вы можете использовать оконные функции:

select CustomerID,
       max(case when City = 'London' then PostalCode end) over (partition by ContactName) as london_postalcode
from Customers
where ContactName in (select ContactName
                      from Customers
                      where City = 'London'
                     ) ;
1 голос
/ 26 января 2020

вы можете использовать cte, а для внутреннего запроса - агрегирование в случае множественного результата

with cte as
(
select ContactName
 from Customers where City = 'London'
)
select CustomerID, 
(select max(PostalCode) from Customers where ContactName = c1.ContactName
)
from Customers c
join cte c1 on c.ContactName=c1.ContactName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...