О подзапросе в T-SQL - PullRequest
0 голосов
/ 11 мая 2019

У меня есть вопрос.Я хочу знать, когда я запускаю подзапрос несколько раз, чтобы получить одно и то же значение, тогда подзапрос выполняется каждый раз или нет.

Например: у меня есть этот запрос:

SELECT [, columns] 
FROM SomeTable 
WHERE id >= (SELECT MAX(SomeTableId) FROM OtherTable)

Имеет ли подзапросвыполнить несколько раз или нет?

1 Ответ

3 голосов
/ 11 мая 2019

Это зависит. Для вашего примера, SQL Server достаточно умен, чтобы выполнить запрос только один раз. Это оптимизация.

Часто такие конструкции перемещаются в предложение FROM, поэтому однократное выполнение более очевидно:

SELECT . . . 
FROM SomeTable s JOIN
     (SELECT MAX(SomeTableId) as max_SomeTableId
      FROM OtherTable
     ) o
     ON s.id >= max_SomeTableId;

Если в вашем запросе есть условие корреляции (обычно это предложение where или having, которое ссылается на внешний запрос), тогда может быть выполнено более одного раза.

Я говорю "может", потому что фактический план выполнения не может быть похож на ваш исходный запрос. SQL является декларативным языком, где «запрос» фактически выражает то, как должен выглядеть набор результатов. Оптимизатор может выбрать любой метод для получения объявленного результирующего набора.

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