2010-03-05 2 views
4

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

Таблица данных имеет два столбца:

Source Dest 
1   2 
1   2 
2   1 
3   1 

Я пытался придумать с 2003 SQL запросов MS Access, которая будет возвращать:

1  2 
3  1 

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

UPDATE: именно, я пытаюсь исключить 2,1, потому что 1,2 уже включены. Мне нужны только уникальные комбинации, в которых последовательность не имеет значения.

+2

2 - 1 Неповторимо также, должно ли оно быть исключено? –

+1

Зачем было бы оставить 2,1? Включен ли beacuase 1,2? И как тогда вы решаете, что использовать 1,2 или 2,1? –

+0

2,1 следует исключить, это проблема –

ответ

2

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

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:

Пример с таблицей данных, которая является тем же самым ...

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) 

или (Nice and Access Formatted ...)

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

Первая ревизия возвращает 1,2; 1,2; 3,1, что, очевидно, неверно. –

+0

Я просто запускаю это на MS Access, и он вернулся 1,2 3,1. Вы проверили это? Включили ли вы ** DISTINCT **? –

+0

Astander, скопировал его один к одному, только что заменил Таблицу 1 данными –

0

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

SELECT distinct * from tabval ; 
+0

Это не то, о чем просили ... –

0

Для устранения дубликатов "выберите отчетливые" легче, чем "группа":

select distinct source,dest from data; 

EDIT: Теперь я вижу, что вы пытаетесь получить уникальные комбинации (не включают в себя как 1,2, так и 2,1). Вы можете сделать это как:

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

Знак «минус» переворачивает порядок вокруг и исключает случаи, когда у вас уже есть матч; «где источник < dest» не позволяет удалить оба (1,2) и (2,1)

+0

вернет 1,2; 2,1; 3; 1 - 2,1 следует исключить –

+0

Вы не можете использовать минус в MS Access, поэтому проблемы: –

0

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

SELECT * 
FROM tab t1 
WHERE t1.Dest IN 
(
    SELECT TOP 1 DISTINCT t2.Dest 
    FROM tab t2 
    WHERE t1.Source = t2.Source 
) 
+0

Не работает в MS Access 2003, жалуется на предложение IN.Кстати, на всякий случай есть образец желаемого результата в вопросе, чтобы устранить возможную двусмысленность. –

+0

этот запрос вернет нужные строки, но я понятия не имею, как писать in в ms access sql. – Andrey

+0

Андрей, извинился, я уточнил в вопросе, что он должен быть Access 2003. –

0
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.

Смежные вопросы