Как получить уникальные пары в SQL при наличии отношения «многие ко многим» в данных

#sql #sap-iq #sybase-asa

#sql #sap-iq #sybase-asa

Вопрос:

У меня есть следующие данные. Мне нужно создать уникальные пары.

 element1        element2
E1              C1
E1              C2
E2              C1
E2              C2
E3              C1
E3              C2
  

Как я могу использовать SQL для получения пар следующим образом:

 E1,C1    E2,C2   Discard E3 
  

Комментарии:

1. Определяем ли мы «уникальный» как «совпадение числовой части»?

2. Элемент1 и Элемент2 являются столбцами в одной таблице

3. Для решения этой проблемы вам нужны рекурсивные CTE. Я не думаю, что Sybase их поддерживает.

Ответ №1:

Я бы сделал что-то вроде:

 select distinct a.element1, b.element2
from (
  select element1, dense_rank() over(order by element1) as rank
  from my_table
) a
join (
  select element2, dense_rank() over(order by element2) as rank
  from my_table
) b on a.rank = b.rank
  

Комментарии:

1. Приведенный выше код не работает. Это дает мне только E1, C1, а не E2, C2

2. Извините, я не могу это по-настоящему протестировать. У меня есть SAP ASE, но не SAP ASA.

3. Если вы выполняете внутренние запросы отдельно, получаете ли вы rank : (1, 2, 3) для первого и (1, 2) для второго?