SQL-запрос для сравнения строк - PullRequest
1 голос
/ 20 апреля 2011

Предположим, у нас есть таблица:

id1  id2
1    2
2    1
3    4
4    3

Ожидаемый результат -

id1  id2
1    2 
3    4

Строки 1,2 и 2,1 одинаковы, и нужно выводить только одну. Какой SQL-запрос для этого.

Ответы [ 4 ]

4 голосов
/ 20 апреля 2011

Предполагая, что RDBMS поддерживает LEAST и GREATEST (Oracle поддерживает):

SELECT  DISTINCT LEAST(id1, id2), GREATEST(id1, id2)
FROM    mytable

Кроссплатформенная версия:

SELECT  DISTINCT
        CASE WHEN id1 < id2 THEN id1 ELSE id2 END,
        CASE WHEN id1 > id2 THEN id1 ELSE id2 END
FROM    mytable
0 голосов
/ 21 апреля 2011

Точно такой же вопрос мне тоже пришлось недавно решить.См. Устранение дубликатов .

select id1, id2
from t
where not exists (
  select 1
  from t
  where id1 = t.id2
  and id2 = t.id1
  and rowid > t.rowid
);
0 голосов
/ 20 апреля 2011

Моя интерпретация того, что вы пытаетесь сделать, такова: возвращаемые строки, в которых id1 совпадает с id2, а id2 совпадает с id1, но возвращают только строки из этого набора, когда id1 также меньше или равен id2.

select x.id1, x.id2 from myTable x, myTable y where x.id1 = y.id2 and y.id1 = x.id2 and x.id1 <= y.id1

0 голосов
/ 20 апреля 2011
Select ...
From MyTable As T
Where Exists    (
                Select 1
                From MyTable As T2
                Where T2.id1 = T.id2
                    And T2.id2 = T.id1
                )
    And T.id1 < T.id2     

Другое решение с использованием Union

Select T.id1, T.id2
From MyTable As T
Where T.id1 <= T.id2
Union 
Select T.id2, T.id1
From MyTable As T
Where T.id1 > T.id2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...