返回两个字段不同的查询结果(Access 2010)

时间:2019-10-01 16:20:22

标签: sql database ms-access criteria

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

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

然后,我需要一个单独的查询来查找所有观察值在何处等于首次观察到的位置。因此,如果IslandID = IslandAlpha

我是Access的新手,所以如果您需要有关如何设置我的表/关系的更多信息,请告诉我!预先感谢。

2 个答案:

答案 0 :(得分:0)

假设有以下表格:

  1. Birds表,其中所有单独的鸟都有具有唯一的BirdIDIslandAlpha的记录。
  2. Sightings表,其中记录了各个目击事件,包括IslandID

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

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

您的第二个查询将是相同的,但是在=子句中使用<>而不是WHERE

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

答案 1 :(得分:0)

我想您是在问这个问题,因为在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;