2013-12-19 2 views
0

У меня есть таблица, которая содержит для каждой строки аналог. Например:Выберите только одну комбинацию из двух столбцов

┏━━━━━━━━━━┳━━━━━━━━━━┓ 
┃ Column 1 ┃ Column 2 ┃ 
┣━━━━━━━━━━╋━━━━━━━━━━┫ 
┃ A  ┃ B  ┃ 
┣━━━━━━━━━━╋━━━━━━━━━━┫ 
┃ B  ┃ A  ┃ 
┗━━━━━━━━━━┻━━━━━━━━━━┛ 

Я хочу только одна комбинация:

┏━━━━━━━━━━┳━━━━━━━━━━┓ 
┃ Column 1 ┃ Column 2 ┃ 
┣━━━━━━━━━━╋━━━━━━━━━━┫ 
┃ A  ┃ B  ┃ 
┗━━━━━━━━━━┻━━━━━━━━━━┛ 

Что бы такое заявление выглядит?

ответ

3

Вот один из способов:

select * 
from t 
where column1 < column2; 

Это предполагает, что все пары действительно в таблице (или, по меньшей мере, первый из каждой пары в таблице).

Или, вот еще один способ:

select least(column1, column2) as column1, greatest(column1, column2) as column2 
from t 
group by least(column1, column2), greatest(column1, column2); 

Это работает, даже если только половина из некоторых пар в таблице.

Смежные вопросы