从重复记录中选择每个唯一ID一行

时间:2013-09-24 18:06:16

标签: sql ms-access ms-access-2010

在2010年的Ms.Access中,我有一个类似的查询表,如下面的一个显示重复记录。问题是,即使我有唯一的ID,其中一个字段的数据也不同于其他行,因为我在此查询中组合了两个单独的表。我只是希望每个ID显示一行并消除其他行。我选择哪一行并不重要。见下文:

ID - NAME - FAVCOLOR
1242 - John - Blue
1242 - John - Red  
1378 - Mary - Green

我想选择任何具有相同ID的行。我选择哪一行并不重要,只要我每个ID显示一行就是重要的。

ID - NAME - FAVCOLOR
1242 - John - Red  
1378 - Mary - Green

3 个答案:

答案 0 :(得分:2)

将当前查询中的SQL用作子查询,然后使用GROUP BY IDNAME。您可以检索最小FAVCOLOR,因为您只想要一个而不关心哪个。

SELECT sub.ID, sub.NAME, Min(sub.FAVCOLOR)
FROM
    (
        SELECT ID, [NAME], FAVCOLOR
        FROM TABLE1
        UNION ALL
        SELECT ID, [NAME], FAVCOLOR
        FROM TABLE2
    ) AS sub
GROUP BY sub.ID, sub.NAME;

注意NAMEreserved word。使用表名或别名命名或为其添加前缀的括号,以避免混淆数据库引擎。

答案 1 :(得分:0)

尝试选择不带ALL参数的union,看看是否得到了所需的结果。

您的新查询看起来像

“SELECT ID,NAME,FAVCOLOR FROM TABLE1; UNION SELECT ID,NAME,FAVCOLOR FROM TABLE2;”

答案 2 :(得分:0)

如果您只想要ID,为什么查询中的颜色?也许我错过了什么。 我唯一能建议的是使用一些聚合函数(min,max)来获得一种颜色。

    Select
    id,
    name,
    max(favcolor)
    from (
    (select * from table1) t1
    union (select * from table2) t2 )t
    group by
    id,
    name