select在内部使用select和避免在select内部使用select与CTE有什么区别?
当我看到执行计划时,执行计划没有区别吗?
这有什么区别吗? 当我使用CTE时,它会执行一次还是每当我在select内部调用CTE时,都会被多次调用?
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