Если вы можете иметь не более двух записей на пару, то:
select id1, id2
from t
where id1 < id2
union all
select id1, id2
from t
where id2 > id1 and
not exists (select 1 from t t2 where t2.id1 = t.id2 and t2.id2 = t.id1);
Если вы просто хотели уникальные пары, я бы использовал least()
и greatest()
:
select least(id1, id2), greatest(id1, id2)
from t
group by least(id1, id2), greatest(id1, id2);
РЕДАКТИРОВАТЬ:
Вы также можете сделать это с помощью оконных функций или distinct on
:
select distinct on (least(id1, id2), greatest(id1, id2)) t.*
from t
order by least(id1, id2), greatest(id1, id2);