Получить уникальные строки из таблицы перекрестных ссылок, где все элементы ссылаются друг на друга - PullRequest
1 голос
/ 17 мая 2019

У меня есть таблица перекрестных ссылок номеров деталей (PN).Есть 2 столбца, PN и ALT_PN.Все номера деталей перекрестно ссылаются друг на друга.

Мне нужно создать отчет, показывающий только уникальные значения в этой таблице.Например, только показывают, что A имеет альтернативу B, и не показывают, что B является альтернативой A.

Я нашел решения для Mysql, которые работают, но они не работают в Oracle 11g.

Create table temp ( id integer primary key, PN varchar(10), Alt_PN 
varchar(10));

insert into temp values(1,'A','B');
insert into temp values(2,'B','A');
insert into temp values(3,'X','Y');
insert into temp values(4,'Y','X');
insert into temp values(5,'C','D');
insert into temp values(6,'C','E');
insert into temp values(7,'D','C');
insert into temp values(8,'D','E');
insert into temp values(9,'E','C');
insert into temp values(10,'E','D');

Я хочу вернуть только идентификаторы 1, 3, 5, 6 и 8

1 Ответ

0 голосов
/ 17 мая 2019

Если все перекрестные ссылки друг на друга, просто выполните:

select t.*
from temp t
where t.pn < t.alt_pn;

Это вернет одну строку из каждой пары и будет работать с любым типом.

Если вас беспокоит, что присутствуют не все пары, вы можете сделать:

select t.*
from (select t.*,
             row_number() over (partition by least(t.pn, t.alt_pn), least(t.pn, t.alt_pn) order by t.pn) as seqnum
      from t
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...