Получить уникальные комбинации двух значений поля - PullRequest
4 голосов
/ 05 марта 2010

Возможно, об этом уже спрашивали, но я не могу найти ответ.

Данные таблицы имеют два столбца:

Source   Dest
1         2
1         2
2         1
3         1

Я пытаюсь найти SQL-запрос MS Access 2003, который выдаст:

1       2
3       1

Но все безрезультатно. Пожалуйста помоги!

ОБНОВЛЕНИЕ: точно, я пытаюсь исключить 2,1, потому что 1,2 уже включены. Мне нужны только уникальные комбинации, где последовательность не имеет значения.

Ответы [ 5 ]

2 голосов
/ 05 марта 2010

Для доступа Ms вы можете попробовать

SELECT  DISTINCT
        *
FROM Table1 tM
WHERE NOT EXISTS(SELECT 1 FROM Table1 t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source)

EDIT:

Пример с таблицей Data, которая совпадает ...

SELECT  DISTINCT
        *
FROM Data  tM
WHERE NOT EXISTS(SELECT 1 FROM Data t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source)

или ( Ницца и доступ отформатированы ... )

SELECT DISTINCT *
FROM Data AS tM
WHERE (((Exists (SELECT 1 FROM Data t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source))=False));
0 голосов
/ 05 марта 2010
SELECT t1.* FROM
(SELECT
  LEAST(Source, Dest) AS min_val,
  GREATEST(Source, Dest) AS max_val
FROM table_name) AS t1
GROUP BY t1.min_val, t1.max_val

Вернется

1, 2
1, 3

в MySQL.

0 голосов
/ 05 марта 2010

Чтобы устранить дубликаты, «выбрать отличительные» проще, чем «группировать по»:

select distinct source,dest from data;

РЕДАКТИРОВАТЬ: теперь я вижу, что вы пытаетесь получить уникальные комбинации (нене включает как 1,2, так и 2,1).Вы можете сделать это следующим образом:

select distinct source,dest from data
minus
select dest,source from data where source < dest

«Минус» переворачивает порядок и исключает случаи, когда у вас уже есть совпадение;«где источник

0 голосов
/ 05 марта 2010

Ваш вопрос задан неправильно.«уникальные комбинации» - это все ваши записи.но я думаю, что вы имеете в виду одну строку на каждый источник.так оно и есть:

SELECT *
FROM   tab t1
WHERE  t1.Dest IN 
(
   SELECT TOP 1 DISTINCT t2.Dest
   FROM tab t2
   WHERE t1.Source = t2.Source
)
0 голосов
/ 05 марта 2010

Используйте этот запрос:

SELECT distinct *  from tabval ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...