lig*_*txx 5 sql duplicates ignore-duplicates
我已经在这方面苦苦挣扎了很长一段时间,但我无法理解.
我有一个有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 - | 阿贝尔,古斯塔夫| 阿贝尔,古斯塔夫 - | 1
4 - | 阿贝莱,古斯塔夫| 阿贝尔,古斯塔夫 - | 1
to
| ------ autor1 ---- | ------ autor2 ----- | dld
| 阿贝尔,古斯塔夫 - | 阿贝尔,古斯塔夫| 1
| 阿贝尔,古斯塔夫 - | 阿贝莱,古斯塔夫| 1
Lie*_*ers 10
使用NOT EXISTS我所知道的所有DBMS的工作.这样做的复杂性是不要忘记包含一个条款id.没有它,就不会有任何回报.
SELECT *
FROM YourTable yto
WHERE NOT EXISTS (
SELECT *
FROM YourTable yti
WHERE yti.autor2 = yto.autor1
AND yti.id > yto.id
)
Run Code Online (Sandbox Code Playgroud)
编辑
一步一步,以下是声明背后的逻辑细分
ID = 1)ID > 1和autor1 = autor2(是,ID 3) - > 忽略ID = 2)ID > 2和autor1 = autor2(是,ID 4) - > 忽略ID = 3)ID > 3和autor1 = autor2(否) - > 包含ID = 4)ID > 4和autor1 = autor2(否) - > 包含| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |