Sql server MSSQL:如何从不同的表中删除重复的列值?

Sql server MSSQL:如何从不同的表中删除重复的列值?,sql-server,duplicates,Sql Server,Duplicates,如何从不同的表中删除重复的列值? 给出了不带外键引用的下表: 表A Id IdentifierString ------------------- 1 String A 2 String B 3 String C Id IdentifierString ------------------- 1 NULL 2 String B 3 NULL 表B Id IdentifierString ------------------- 1 String A 2 String C 3

如何从不同的表中删除重复的列值?
给出了不带外键引用的下表:

表A

Id IdentifierString
-------------------
1  String A
2  String B
3  String C
Id IdentifierString
-------------------
1  NULL
2  String B
3  NULL
表B

Id IdentifierString
-------------------
1  String A
2  String C
3  String D
Id IdentifierString
-------------------
1  NULL
2  NULL
3  String D
我要删除所有重复的列值:

表A

Id IdentifierString
-------------------
1  String A
2  String B
3  String C
Id IdentifierString
-------------------
1  NULL
2  String B
3  NULL
表B

Id IdentifierString
-------------------
1  String A
2  String C
3  String D
Id IdentifierString
-------------------
1  NULL
2  NULL
3  String D

这是如何做到的?

这可以通过使用
UNION ALL
have(COUNT)
UPDATE
语句来实现,如下所示:

CREATE TABLE Table1 (Id INT, IdentifierString VARCHAR (20));

INSERT INTO Table1 (Id, IdentifierString) VALUES
(1, 'String A'),
(2, 'String B'),
(3, 'String C');

CREATE TABLE Table2 (Id INT, IdentifierString VARCHAR (20));

INSERT INTO Table2 (Id, IdentifierString) VALUES
(1, 'String A'),
(2, 'String C'),
(3, 'String D');

DECLARE @DuplicateEntries TABLE (IdentifierString VARCHAR(20));

INSERT INTO @DuplicateEntries (IdentifierString)
SELECT IdentifierString FROM (
    SELECT IdentifierString FROM Table1
    UNION ALL
    SELECT IdentifierString FROM Table2
) A 
GROUP BY IdentifierString
HAVING COUNT(IdentifierString) > 1;

UPDATE T1
SET T1.IdentifierString = NULL
FROM Table1 T1
JOIN @DuplicateEntries D ON D.IdentifierString = T1.IdentifierString;

UPDATE T2
SET T2.IdentifierString = NULL
FROM Table2 T2
JOIN @DuplicateEntries D ON D.IdentifierString = T2.IdentifierString;

SELECT * FROM Table1;
SELECT * FROM Table2;

请在

上找到正在运行的演示,这是您删除重复项的dml脚本

delete from table1 where id in (select id from (
    select id, t1.IdentifierString, t2.IdentifierStringfrom table1 t1
    left join table2 t2 on t2.IdentifierString= t1.IdentifierString) as t3
where isnull(t1.IdentifierString, '') = '' or  isnull(t2.IdentifierString, '') = '')

delete from table2 where id in (select id from (
    select id, t1.IdentifierString, t2.IdentifierStringfrom table2 t1
    left join table1 t2 on t2.IdentifierString= t1.IdentifierString) as t3
where isnull(t1.IdentifierString, '') = '' or  isnull(t2.IdentifierString, '') = '')

抱歉,我想再问一个问题,但不幸的是我做了一次编辑,啊…@Powerslave不客气。我很高兴能帮上忙!