Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用内部联接进行更新的TSQL语法_Sql Server_Tsql_Join_Sql Update - Fatal编程技术网

Sql server 使用内部联接进行更新的TSQL语法

Sql server 使用内部联接进行更新的TSQL语法,sql-server,tsql,join,sql-update,Sql Server,Tsql,Join,Sql Update,我试图将此mysql查询转换为在SQL上运行,但在join上的语法方面存在一些问题。基本上,我想做的是根据DWH_日期将重复行上的DWH_HISTO设置为1。因此,应标记旧的副本 这就是我尝试过的 UPDATE MAG_L_D3.dbo.INSCRIPT INNER JOIN (SELECT MAX(DWH_DATE) as lastId, CODINS FROM INSCRIPT WHERE DWH_HISTO=0 GROUP BY CODINS HAVING COUNT(*)

我试图将此mysql查询转换为在SQL上运行,但在join上的语法方面存在一些问题。基本上,我想做的是根据DWH_日期将重复行上的DWH_HISTO设置为1。因此,应标记旧的副本

这就是我尝试过的

UPDATE MAG_L_D3.dbo.INSCRIPT
INNER JOIN
(SELECT MAX(DWH_DATE) as lastId, CODINS
  FROM INSCRIPT
  WHERE DWH_HISTO=0
  GROUP BY CODINS
  HAVING COUNT(*) > 1) duplic on duplic.CODINS = MAG_L_D3.dbo.INSCRIPT.CODINS
  SET DWH_HISTO = 1
  WHERE MAG_L_D3.dbo.INSCRIPT.DWH_DATE < duplic.lastId

使用内部联接进行更新:

UPDATE I 
SET DWH_HISTO = 1 FROM MAG_L_D3.dbo.INSCRIPT I
INNER JOIN
(SELECT MAX(DWH_DATE) as lastId, CODINS
  FROM INSCRIPT
  WHERE DWH_HISTO=0
  GROUP BY CODINS
  HAVING COUNT(*) > 1) duplic on duplic.CODINS = I.CODINS
  WHERE I.DWH_DATE < duplic.lastId

我相信这就是您要寻找的语法:

;WITH CTE as
(
  SELECT *, row_number() over (partition by CODINS order by DWH_DATE desc)rn
)
UPDATE CTE
SET DWH_HISTO = 1 
WHERE 
  rn > 1
  and DWH_HISTO=0

哇,有趣的语法:O不确定到底发生了什么,但会研究它:D谢谢you@C.Astraea它比join方法快