首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL从两列中删除重复数据

SQL从两列中删除重复数据
EN

Stack Overflow用户
提问于 2012-05-07 20:29:28
回答 1查看 1.6K关注 0票数 5

我已经在这个问题上挣扎了很长一段时间,但我就是想不通。

我有一个有3列的表格。2列包含名称,第三列包含这些名称之间的Damerau Levensthein距离( http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance )。

每一列都包含每个名称,这意味着autor1列中的所有名称也会出现在autor2列中。结果,仅交换了autor1和autor2列,我就有了所需行的两倍。

例如,第3行等于第1行,只是交换了autor列,2-4也是如此。我该如何制定一个省略这些“重复项”的查询?

id-|-autor1-|-autor2-| dld

1古斯塔夫阿贝尔,古斯塔夫-|阿贝尔,古斯塔夫|1

2古斯塔夫阿贝尔,古斯塔夫-|阿贝尔,古斯塔夫|1

3古斯塔夫·阿贝尔( -| Abel )|阿贝尔,古斯塔夫--| 1

4阿贝尔,古斯塔夫|阿贝尔,古斯塔夫-| 1

|-autor1-|-autor2-| dld

| Abel,Gustav -| Abel,Gustave |1

| Abel,Gustav -| Abele,Gustav |1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-07 20:31:16

使用NOT EXISTS可以在我所知道的所有数据库管理系统上运行。这样做的复杂性在于不要忘记包含一个关于id的子句。如果没有它,将不会返回任何内容。

代码语言:javascript
复制
SELECT *
FROM   YourTable yto
WHERE  NOT EXISTS (
         SELECT  *
         FROM    YourTable yti
         WHERE   yti.autor2 = yto.autor1
                 AND yti.id > yto.id
       )

编辑

下面是语句背后的逻辑的逐步分解

获取第一条记录(ID = 1)

  • Is Ignore

  • Get ID > 1autor1 = autor2 (是,ID 3)和下一条记录-> ID > 2 (ID = 2)

  • Is autor1 = autor2(是,ID 3)和->ID > 2(是,ID 4) the next record (ID = 3)

  • Is there a record where ID > 3 Ignore

  • Get autor1 = autor2 (No) -> -> next record (ID = 4)

  • Is there a record where ID > 4 ID > 3autor1 = autor2 (No) there a record whereID > 4ID > 3autor1 = autor2(No) -> next record->there a record whereID > 4ID > 3autor1 = autor2(No)->next record->there a record whereID > 4ID > 3autor1 = autor2(No)->next record->there a record whereID > 4ID > 3autor1 = autor2(No)->next record whereID > 4 autor1 = autor2 (No)->record
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10482107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档