我想将我的表与其自身连接起来,以检查特定列上具有相似值的行,但我想删除隐含的重复行,即通过执行以下查询:
SELECT a1.id, a2.id
FROM table_1 a1
JOIN table_1 a2
ON a1.column_x = a2.column_x
AND a1.id <> a2.id ;
我获得了:
id | id
----+-----
28 | 27
27 | 28
47 | 48
48 | 47
...
我想要获得的是:
id | id
----+-----
28 | 27
47 | 48
请问我怎样才能做到这一点?
使用>
或<
而不是<>
:
SELECT a1.id, a2.id
FROM table_1 a1 JOIN
table_1 a2
ON a1.column_x = a2.column_x AND
a1.id > a2.id ;
使用LEAST()
和GREATEST()
函数总是在第一列中返回较小的值,在第二列中返回较大的值。执行SELECT DISTINCT
以避免重复。
将返回";单独";行,例如,如果有(33,34(行,但没有(34,33(行。
SELECT DISTINCT least(a1.id, a2.id), greatest(a1.id, a2.id)
FROM table_1 a1
JOIN table_1 a2
ON a1.column_x = a2.column_x
AND a1.id <> a2.id ;