将列更新为重复

Update column as Duplicate

我有一个 table 包含三列,A、B 和状态。

首先,我过滤 table 以仅获取重复值

使用这个查询

    SELECT  A
   FROM Table_1
     GROUP BY  A
    HAVING COUNT(A) >1

输出:

第二步,我需要检查B列是否有重复值,如果有重复我需要更新状态为D。

我试试这个查询

UPDATE Table_1

 SET status = 'D'

 WHERE exists

 (SELECT  B
  FROM Table_1
 GROUP BY  B
HAVING COUNT(B) >1)

但它更新了所有行。

以下使用 row_number 执行您需要的操作,以识别具有重复和可更新 CTE 的任何组,以检查属于具有重复:

with d as (
    select *, row_number() over(partition by a,b order by a,b) dn
    from t
)
update d set d.status='D'
where exists (select * from d d2 where d2.a=d.a and d2.b=d.b and d2.dn>1)

您可以使用可更新的 CTE 执行此操作,而无需任何进一步的连接,方法是使用窗口化 COUNT

WITH d AS (
    SELECT *,
      cnt = COUNT(*) OVER (PARTITION BY a, b)
    FROM t
)
UPDATE d
SET status = 'D'
WHERE cnt > 1;