SQL получит только уникальную комбинацию из двух столбцов - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть таблица с:

A     B
1     2
2     1

и я пытаюсь с помощью команды sql получить только одну комбинацию

A     B
1     2

как я могу это сделать?

1 Ответ

0 голосов
/ 10 ноября 2018

Каноническим способом в стандартном SQL является:

select a, b
from t
where a < b
union all
select a, b
from t
where a > b and not exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a);

Обратите внимание, что это предполагает отсутствие дубликатов или одинаковых значений. Вы можете легко справиться с ними, используя сравнения select distinct и <=. По моему опыту, эта проблема часто возникает, когда на пару не более двух строк.

Это сохраняет исходные значения. Итак, если вы начнете с:

1    2
5    4

Вы получите это в наборе результатов.

Если вас не интересует порядок, многие базы данных поддерживают least() / greatest():

select least(a, b) as a, greatest(a, b) as b
from t
group by least(a, b), greatest(a, b);

Вы можете сделать то же самое с case выражениями. Или проще:

select distinct least(a, b) as a, greatest(a, b) as b
from t;
...