SQL: Получить Distinct для разных столбцов - PullRequest
0 голосов
/ 16 октября 2019

У меня есть следующий сценарий:

В SQL-таблице у меня есть следующие столбцы:

|----------------------------------------|-------------------------------------|
|      Col 1                             |     Col 2                           |
|----------------------------------------|-------------------------------------|
| 4BAEFCAD-0B61-E911-B26B-005056872FC1   | 855757A6-0D61-E911-B26B-005056872FC1|
|----------------------------------------|-------------------------------------|
| 855757A6-0D61-E911-B26B-005056872FC1   | 4BAEFCAD-0B61-E911-B26B-005056872FC1|
|----------------------------------------|-------------------------------------| 
| D2ADDEF8-A3A8-E911-B272-005056872FC1   | CED9DFD0-35A9-E911-B272-005056872FC1|
|----------------------------------------|-------------------------------------|

Первые две строки являются своего рода ссылками на одни и те же записи, поскольку они содержатте же значения для строки 1 и 2, но поменялись местами.

Есть ли способ получения только одного из этих двух столбцов? так что в итоге получаю следующий результат:

|----------------------------------------|-------------------------------------|
|      Col 1                             |     Col 2                           |
|----------------------------------------|-------------------------------------|
| 4BAEFCAD-0B61-E911-B26B-005056872FC1   | 855757A6-0D61-E911-B26B-005056872FC1|
|----------------------------------------|-------------------------------------| 
| D2ADDEF8-A3A8-E911-B272-005056872FC1   | CED9DFD0-35A9-E911-B272-005056872FC1|
|----------------------------------------|-------------------------------------|

THX

1 Ответ

2 голосов
/ 16 октября 2019

Простой метод:

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

Преимущество заключается в сохранении исходных строк. Если вы не заботитесь о заказе:

select distinct (case when col1 < col2 then col1 else col2 end) as col1,
       (case when col1 < col2 then col2 else col1 end) as col2
from t;
...