В чем разница между выбором с использованием внутри выбора и избеганием выбора внутри выбора и использованием CTE?
Когда я вижу план выполнения, нет разницы в плане выполнения?
Есть ли в этом разница?
Когда я использую CTE, будет ли он выполняться один раз или всякий раз, когда я вызываю CTE внутри select, он будет вызываться несколько раз?
SELECT ID,
(SELECT TOP 1 [TEXT] FROM TABLEB B
WHERE B.NAME ='ABC' AND B.CUSTOMER='ABC'
AND B.SERVICE=A.SERVICE AND B.USERID=DBO.fnGetUser()
ORDER BY DESC)
FROM TABLEA A
Обновлено до:
WITH cte(SERVICE)
AS
(
SELECT SERVICE FROM TABLEB B
WHERE B.NAME ='ABC' AND B.CUSTOMER='ABC'
AND B.USERID=DBO.fnGetUser()
)
SELECT ID,
(SELECT TOP 1 [TEXT] FROM cte B
WHERE B.SERVICE=A.SERVICE)
FROM TABLEA A