2012-03-01 5 views
-2
one table a= {el1, el2} 
where el1 is 1..10, el2 is {5..15}. 

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

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

ответ

1

Я уверен, что есть более элегантное решение, но прямо сейчас я не могу думать об этом. Первая часть находит строки, где вы не можете найти совпадение, если вы отмените столбцы. Второй находит строки, где вы можете найти матч, если поменять местами столбцы - и сделок с [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

я придумал немного другим решением, сделанное объединение, то есть table1 (а , b) table2 (a, b) выберите a, b из t1, где a

+0

Ну почему бы не опубликовать его, чтобы помочь другим в будущем? – kaj

0

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

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

Для предотвращения повреждения данных от расхождений (... исправить утечки):

ALTER TABLE YourTable ADD 
    CHECK (el1 < el2); 
Смежные вопросы