【问题标题】:Return query results where two fields are different (Access 2010)返回两个字段不同的查询结果 (Access 2010)
【发布时间】:2019-10-01 16:20:22
【问题描述】:

我正在一个大型访问数据库 (Access 2010) 中工作,并试图返回两个位置不同的记录。

就我而言,我有大量鸟类在多个日期被观察到,并且可能在不同的岛屿上。每只鸟都有一个唯一的 BirdID 和一个实际的物理标识符(不幸的是,它可能随着时间的推移而改变)。 [稍后我将尝试解决不断变化的物理标识符问题]。我目前想查询其中一个或多个观察结果与“IslandAlpha”(观察它们的第一个岛屿)不同的个别鸟类。类似于 BirdID 的标准:WHERE IslandID [不等于] IslandAlpha。

然后,我需要一个单独的查询来查找所有观察结果都等于第一次观察到的位置。那么其中 IslandID = IslandAlpha

我是 Access 新手,所以如果您需要有关我的表/关系设置方式的更多信息,请告诉我!提前致谢。

【问题讨论】:

  • 编辑问题以显示示例数据和所需的输出。 “IslandAlpha”数据在哪里?

标签: sql database ms-access criteria


【解决方案1】:

假设以下表格:

  1. Birds 表,其中所有个体鸟类都有具有唯一 BirdID 和 IslandAlpha 的记录。
  2. Sightings 记录个人目击事件的表,包括 IslandID。

您的第一个查询将如下所示:

SELECT *
FROM Birds
INNER JOIN Sightings ON Birds.BirdID=Sightings.BirdID 
WHERE Sightings.IslandID <> Birds.IslandAlpha

您的第二个查询将是相同的,但在 WHERE 子句中使用 = 而不是 &lt;&gt;。

请向我们提供有关您正在使用的表和列的信息。

【讨论】:

    【解决方案2】:

    我假设您问这个问题是因为简单的表格连接和过滤IslandAlpha ObsLoc 是不可能的,因为IslandAlpha 是从每只鸟的第一个观察记录中得出的。提取每只鸟的第一个观察记录需要一个嵌套查询。在观察中需要一个唯一的记录标识符 - 自动编号应该服务。假设有一个观察日期/时间字段,请考虑:

    SELECT * FROM Observations WHERE ObsID IN 
        (SELECT TOP 1 ObsID FROM Observations AS Dupe 
         WHERE Dupe.ObsBirdID = Observations.ObsBirdID ORDER BY Dupe.ObsDateTime);
    

    现在将该查询用于后续查询。

    SELECT * FROM Observations 
    INNER JOIN Query1 ON Observations.ObsBirdID = Query1.ObsBirdID 
    WHERE Observations.ObsLocID <> Query1.ObsLocID;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2011-11-08
      相关资源
      最近更新 更多