我不是 SQL 开发人员。我在下面有这段代码,我的 DBA 希望我进一步简化。希望你们可以看看并帮助如何进一步简化这个查询。这里可以不使用 CTE 吗?谢谢。
;
WITH CTE_tmp1(RecId, Newdata, Changecode) AS
(
SELECT RecId, Newdata, Changecode
FROM dbo.POLL
WHERE Changecode = 1
)
UPDATE dbo.POLL
SET RecId = T.Newdata
FROM dbo.POLL P
INNER JOIN CTE_tmp1 T
ON P.RecId = T.RecId
WHERE P.Changecode IS NOT NULL AND P.Changecode <> 1
`
答案 0 :(得分:5)
你真的不需要 CTE。
在 POLL
语句中使用表 UPDATE
的自联接。
还有条件:
P.Changecode IS NOT NULL
不需要,因为你有:
P.Changecode <> 1
这将过滤掉null
。
UPDATE P
SET P.RecId = T.Newdata
FROM POLL P INNER JOIN POLL T
ON P.RecId = T.RecId
WHERE P.Changecode <> 1 AND T.Changecode = 1