Это немного сложно, если у вас нет всех комбинаций. Результаты вашего примера не имеют null
, поэтому я изменю join
s на inner join
s, а затем использую distinct on
:
select distinct on (least(b.column1, c.column2), greatest(b.column1, c.column2))
b.column1 as result1, c.column2 as result2
from table a join
table b
on a.column1 = b.column1 join
table c
on a.column2 = c.column1
order by least(b.column1, c.column2), greatest(b.column1, c.column2);
На самом деле, как ваш запрос сформулирован, join
кажется, не нужны вообще. Итак, вы можете рассмотреть:
select distinct on (least(a.column1, a.column2), greatest(a.column1, a.column2))
a.column1 as result1, a.column2 as result2
from table a
order by least(a.column1, a.column2), greatest(a.column1, a.column2);