将列更新为重复
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;
我有一个 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;