2

在 Ms.Access 2010 中,我有一个类似的查询表,如下所示,它显示重复记录。问题是,即使我有唯一的 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
4

3 回答 3

2

使用当前查询中的 SQL 作为子查询,然后使用GROUP BY IDand NAME。您可以检索最小值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;

注意NAME保留字。将该名称括起来或在其前面加上表名或别名,以避免混淆数据库引擎。

于 2013-09-24T18:16:24.380 回答
0

尝试选择不带 ALL 参数的 union 并查看是否获得所需的结果。

您的新查询看起来像

“从表 1 中选择 ID、名称、喜欢的颜色;从表 2 中选择 ID、名称、喜欢的颜色;”

于 2013-09-24T18:13:52.913 回答
0

如果您只想要 ID,为什么查询中的颜色是?也许我错过了一些东西。我唯一可以建议的是使用一些聚合函数(最小值,最大值)来获得一种颜色。

    Select
    id,
    name,
    max(favcolor)
    from (
    (select * from table1) t1
    union (select * from table2) t2 )t
    group by
    id,
    name
于 2013-09-24T18:17:34.730 回答