删除所有子串

时间:2014-10-27 16:29:35

标签: sql sql-server tsql

我们有' defs' table(def为TEXT,ref为INT),其中def是单词的定义,ref是对单词的引用。

目标:

我需要为每个定义(def)删除所有重复的定义(这些定义将包含在最长的定义中)

初始条件:

  1. 原始数量为300 000

  2. 定义的长度可以是5 000个符号。

  3. 示例:

    DEFS:

    • 大耳朵的动物 - 1

    • 大耳朵和大鼻子的动物 - 1

    • 带尾巴的大动物 - 1

    • 小毛茸茸的哺乳动物 - 2

    • 灰色尾巴的小型毛茸茸哺乳动物 - 2

    输出:

    • 有耳朵和大鼻子的动物 - 1

    • 灰色尾巴的小型毛茸茸哺乳动物 - 2

    对哈希码有的想法,但我无法完成我的想法:(

    知道如何完成它吗?

1 个答案:

答案 0 :(得分:2)

这样的事情对你有用吗?

declare @table table(def text, ref int);

insert into @table
values
('Animal with bit ears', 1),
('Animal with bit ears and big nose', 1),
('Big animal with tail', 1),
('Small furry mammal', 2),
('Small furry mammal with gray tail', 2)
;

delete defs
from (
    select row_number() over (
            partition by ref order by DATALENGTH(def) desc
            ) rank_
    from @table
    ) defs
where defs.rank_ > 1;

select * from @table;