найти уникальные записи в таблице - PullRequest
0 голосов
/ 01 марта 2012
one table a= {el1, el2}
where el1 is 1..10, el2 is {5..15}. 

В таблице записи выглядят как [el1, el2] а также некоторая запись [el2, el1], то есть они одинаковые, только в разных столбцах.

Каков наилучший способ получить уникальные элементы el1, el2? (запись 1,2 соответствует 2,1)

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Я уверен, что есть более элегантное решение, но сейчас я не могу об этом думать.Первая часть находит строки, в которых вы не можете найти совпадение, если перевернуть столбцы.Вторая находит строки, в которых вы можете найти совпадение, если перевернуть столбцы, - и имеет дело с парой [el1, el2], которая имеет одинаковое значение в каждом столбце

select t1.el1, t1.el2
from @tbl t1
where not exists (select * from @tbl t2 where t2.el1 = t1.el2 and t2.el2 = t1.el1)

union

select t1.el1, t1.el2
from @tbl t1
where exists (select * from @tbl t2 where t2.el1 = t1.el2 and t2.el2 = t1.el1 and t2.el1 <= t1.el1)
0 голосов
/ 02 марта 2012

Чтобы очистить данные (вытереть пол ...):

SELECT el1, el2
  FROM YourTable
UNION
SELECT el2 AS el1, el1 AS el2
  FROM YourTable;

Чтобы предотвратить повторное повреждение данных (... устранить утечку):

ALTER TABLE YourTable ADD
    CHECK ( el1 < el2 );
...