SQL Server 2008 R2: Delete duplicate rows from tables containing in view

前端 未结 4 621
孤街浪徒
孤街浪徒 2021-01-17 02:45

--Creating Table dup1

CREATE TABLE dup1
(
    cola VARCHAR(10),
    colb VARCHAR(10)
);

--Insertion of records

INSERT INTO          


        
4条回答
  •  猫巷女王i
    2021-01-17 03:13

    I guess you want just to see record once in your view because you say you want to keep original data. So you should use UNION instead of UNION ALL in your view

    CREATE VIEW V_Dup as
    SELECT * FROM dup1 UNION  
    SELECT * FROM dup2;
    

    Otherwise if you want to delete all the duplicated rows from table generating view you will have to do something like this:

    ;WITH DUP_CTE AS
    (
    SELECT  cola, colb,ROW_NUMBER() OVER (PARTITION BY cola,colb ORDER BY (SELECT 0)) RN FROM V_Dup 
    )
    DELETE FROM DUP_CTE
    
    WHERE EXISTS( SELECT 0 FROM dup_cte AS c WHERE c.cola=dup_cte.cola AND c.colb=dup_cte.colb AND RN <> 1);
    

    If you want to delete only duplicates:

    ;WITH DUP_CTE AS
        (
        SELECT  cola, colb,ROW_NUMBER() OVER (PARTITION BY cola,colb ORDER BY (SELECT 0)) RN FROM V_Dup 
        )
        DELETE FROM DUP_CTE
        WHERE  RN <> 1;
    

    But you will need a primary key in your tables for the last two solutionz.

提交回复
热议问题