可以在没有 CTE 的情况下简化此 SQL 查询吗?

时间:2021-02-27 22:59:39

标签: sql-server tsql sql-update common-table-expression

我不是 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

`

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