SQL 用于模糊匹配去重

SQL for Fuzzy Match Deduplication

Table A 的记录包含带有细微字符串变化的重复实体。没有可以唯一标识实体的唯一键。字段 "ID" 标识 table 内的记录,但不是实体本身。

    TABLE A
    --------------
    ID;SomeString
    1;something1
    2;something2
    3;something3

通过使用模糊匹配软件,table A 与自身进行模糊匹配,以检测重复记录。这就是查找 Table B 的创建方式,它有两列:ID1 和 ID2,表示来自 Table A.

的匹配记录的 ID
    TABLE B
    ---------
    ID1;ID2
    1;2
    1;3
    2;1
    2;3
    3;1
    3;2

重复数据删除的结果是从tableA中删除记录2和3,这样只保留第一条记录。

    TABLE A
    --------------
    ID;SomeString
    1;something1

有没有办法通过使用 Table B 作为已识别重复记录的模糊匹配查找 table 来执行 Table A 到 SQL 的模糊匹配去重? 澄清一下,我不是在寻求一种方法来进行模糊匹配或识别重复项,它已经完成并且结果在 table B 中。我在问如何执行删除重复项(并保留一条记录每个已识别的重复记录组),根据已识别的重复记录对(每个同一实体的多个重复记录对)。

我看到的主要问题是您的 table 模糊匹配包含 ID 顺序颠倒的重复对。这意味着你有行说 2 是 1 的副本,1 是 2 的副本。如果你删除了所有基于 Table B 的 ID2 列的行,你最终会删除所有Table A 中的行。

您可以使用 select 语句解决此问题,该语句重新排列列,使较小的 ID 始终排在第一位。这样,前面的例子“2 是 1 的副本,1 是 2 的副本”就变成了“2 是 1 的副本”的重复。那时,您可以 select 不同的值来获取要从 Table A.

中删除的 ID 列表

根据您的示例数据,此查询删除了正确的值:

WITH Duplicates (ID) AS
(
    SELECT DISTINCT 
        CASE
            WHEN ID1 > ID2 THEN ID1
            WHEN ID2 > ID1 THEN ID2
        END AS Duplicate
    FROM Table_B
)

DELETE
FROM Table_A
WHERE ID IN (SELECT * FROM Duplicates)