内部语义重复的行联接同一个表[PostgreSQL]



我想将我的表与其自身连接起来,以检查特定列上具有相似值的行,但我想删除隐含的重复行,即通过执行以下查询:

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 ;

相关内容

最新更新