Как выбрать уникальное сочетание полей SQL?

Дано:
Таблица отношений. Где есть поля user1, user2, relation
Задача:
Выбрать только уникальные сочетания этих полей.
К примеру
us1 / us2 / rel
вася / петя / братья - попадает в выборку
вася / петя / друзья - не попадает, такое сочетание строкой было выше
петя / вася / враги - попадает - такого сочетания не было

При этом мне не нужны все возможные сочетания этих полей. Мне нужны только те, что записаны в базе, но они не должны повторяться.
Просто подскажите, куда копать - дальше сам справлюсь.
Спасибо.
  • Вопрос задан
  • 5097 просмотров
Решения вопроса 1
@Nc_Soft
SELECT * FROM rel GROUP BY CONCAT(us1, '|', us2, '|', rel)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Nc_Soft
Временная таблица с уникальными индексами + INSERT IGNORE
Ответ написан
@UnholyFather
with t as
(
select 'ВАСЯ' usr1, 'ПЕТЯ' usr2, 'ДРУЖБА' rel from dual
union all
select 'ВАСЯ' usr1, 'ПЕТЯ' usr2, 'СЛУЖБА' rel from dual
union all
select 'ПЕТЯ' usr1, 'ВАСЯ' usr2, 'ЛЮБОВЬ' rel from dual
union all
select 'СЕРЕЖА' usr1, 'ВАСЯ' usr2, 'СИМПАТИЯ' rel from dual
)
select usr1, usr2, rel
from
(select usr1,
usr2,
rel,
row_number() over(partition by usr1 || usr2 order by usr1 || usr2) rn
from t)
where rn = 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы