我已经在这方面苦苦挣扎了很长一段时间,但我无法理解。
我有一个包含3列的表格。 2列包含名称,第3列包含这些名称之间的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个
到
| ------ autor1 ---- | ------ ----- autor2 | DLD
|阿贝尔,古斯塔夫 - |阿贝尔,古斯塔夫| 1
|阿贝尔,古斯塔夫 - |阿贝莱,古斯塔夫| 1个
答案 0 :(得分: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
)
修改强>
一步一步,以下是声明背后的逻辑细分
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
(否) - > 包含强>