Задать вопрос
@footballer

Для чего нужно было придумывать OUTER\CROSS APPLY, если есть JOIN?

Кто-нить может объяснить, чем мог не устроить такой гипотетический синтаксис (который чисто логически должен работать, но вызывает ошибку в точке A.BId "не удалось выполнить привязку составного идентификатора A.BId", типа из-за того, что там нельзя получить доступ к таблице A):
SELECT BB.B1,
	   BB.B2,
       A.A1
  FROM [dbo].[A] as A
  cross join (select top 1 B.B1, B.B2 from [dbo].[B] as B where A.BId = B.Id) as BB

что разрабам T-SQL пришлось придумывать ему такую замену:
SELECT BB.B1,
	   BB.B2,
       A.A1
  FROM [dbo].[A] as A
  cross apply (select top 1 B.B1, B.B2 from [dbo].[B] as B where A.BId = B.Id) as BB

?
Аналогично для OUTER APPLY, для чего он нужен, когда можно было сделать через JOIN (ведь что такое JOIN знают все, а про APPLY знает намного меньше, и большинство в таких ситуациях начнет писать запрос с джойном, как в первом примере, который не будет работать).

И еще получается, что Right Join через APPLY никак не сделать, а если нужно?
  • Вопрос задан
  • 14896 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Александр Кузнецов К ответам на вопрос (2)
DarkRaven
@DarkRaven
разработка программного обеспечения
Вот - https://stackoverflow.com/questions/1139160/when-s...

На словах - это может быть быстрее. А еще может применить параметризованную функцию к каждой строке и присоединить ее результат.
Ответ написан