获取两个字段值的唯一组合

时间:2010-03-05 12:27:17

标签: sql ms-access

可能之前有人问过,但我找不到答案。

表数据有两列:

Source   Dest
1         2
1         2
2         1
3         1

我尝试提出将返回的MS Access 2003 SQL查询:

1       2
3       1

但一切都无济于事。请帮忙!

更新:确切地说,我正在尝试排除2,1因为1,2已经包括在内。我只需要序列无关紧要的独特组合。

5 个答案:

答案 0 :(得分: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)

修改

表数据的示例,它是相同的......

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和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));

答案 1 :(得分:0)

使用此查询:

SELECT distinct *  from tabval ;

答案 2 :(得分:0)

为了消除重复,“select distinct”比“group by”更容易:

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

“减号”会翻转订单并消除您已经匹配的情况; “where source&lt; dest”阻止你删除(1,2)和(2,1)

答案 3 :(得分:0)

您的问题被错误地询问了。 “独特的组合”是您的所有记录。但我认为你的意思是每个来源一行。所以它是:

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

答案 4 :(得分: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中