Rob*_*ien 0 sql-server duplication update
我有以下查询返回重复值:
SELECT
[t].[Field1], [t].[Field2], COUNT([t].[Field2])
FROM [dbo].[Table1] AS [t]
WHERE [t].[Field2] <> ''
GROUP BY [t].[Field1], [t].[Field2]
HAVING COUNT([t].[Field2]) > 1
Run Code Online (Sandbox Code Playgroud)
鉴于该声明,我想编写更新声明以Field2在这些条件下清除。我会怎么写这个?
您可以使用 CTE更简单地做到这一点:
;WITH x AS
(
SELECT
Field1, Field2,
c = COUNT(*) OVER(PARTITION BY Field1, Field2)
FROM dbo.Table1
WHERE Field2 <> ''
)
UPDATE x SET Field2 = '' WHERE c > 1;
Run Code Online (Sandbox Code Playgroud)
或者使用更麻烦(并且可能效率更低,未测试)的自连接:
UPDATE t SET Field2 = ''
FROM dbo.Table1 AS t
INNER JOIN (SELECT Field1, Field2, c = COUNT(Field2)
FROM dbo.Table1
WHERE Field2 <> ''
GROUP BY Field1, Field2
HAVING COUNT(Field2) > 1) AS x
ON x.Field1 = t.Field1
AND x.Field2 = t.Field2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |