Hello&提前谢谢你。
我有一个访问数据库,其中包含有关我们捕获的哺乳动物的以下信息。每个捕获都有一个唯一的ID,它是捕获表的主键:“capture_id”。哺乳动物(取决于物种)有耳标,我们用它来逐年和每天跟踪它们。它们位于名为“id_code”的字段中。我有哺乳动物的性别,因为它是在捕获时记录在另一个叫做性的领域。
我想要一个会返回id_code的所有实例的查询,如果性别发生变化,那么该ID就会改变一次。
示例:动物E555被捕获4次,有3次将此动物记录为F,一次记录为M.
我设法通过堆叠大约5个查询来显示此信息(查询重新捕获的动物 - >查询来自第一个查询的所有动物记录 - >查询id的唯一组合& sex(通过仅使用这两列并且需要“唯一值”) - >查询仅从最后一列中提取重复的id值并拉回这些ID的所有捕获记录)。 HOwever,这显然不是正确的方法,它是不可更新的(我需要这是因为这是用于数据质量控制),并且由于某种原因它还返回每个记录的重复...
我意识到这可以通过其他两种方式解决:
帮助!
答案 0 :(得分:1)
使用单个查询非常简单。作为奖励,查询将是可更新的,不可复制的,并且易于使用:
SELECT mammals.ID, mammals.Sex, mammals.id_code, mammals.date_recorded
FROM mammals
WHERE mammals.id_code In
(select id_code from
(select distinct id_code, sex from [mammals]) a
group by id_code
having count(*)>1
);
您在子查询中看到子查询的原因是因为Access不支持COUNT(DISTINCT)
。对于任何其他“普通”数据库,您可以写:
SELECT mammals.ID, mammals.Sex, mammals.id_code, mammals.date_recorded
FROM mammals
WHERE mammals.id_code In
(select id_code
from [mammals]
group by id_code
having count(DISTINCT Sex)>1
);