Access SQL 查询:返回值不在相关表的间隔之间

Posted

技术标签:

【中文标题】Access SQL 查询:返回值不在相关表的间隔之间【英文标题】:Access SQL Query: Return values not between an interval of related tables 【发布时间】:2016-06-25 05:12:40 【问题描述】:

我有 2 个与名称字段相关的表(间隔和深度)。我希望查询返回不在每个名称的间隔表中的所有深度(或不等于或介于顶部和底部之间)。当 Intervals 表中有多个 Name 记录时,我的查询失败(例如:Name 字段中有 2 条“one”记录)。

间隔

Name    Top    Bottom
one     2      3
one     5      7
two     2      3
three   3      4

深度

Name    Depth
one     1
one     2
one     3
one     4
one     5
one     6
one     7
one     8
two     1
two     2
two     3
two     4
two     5
three   1
three   2
three   3
three   4
three   5

我的查询:

SELECT Intervals.Name, Depths.Depth
FROM Depths INNER JOIN Intervals ON Depths.Name = Intervals.Name
WHERE (((Depths.Depth) < [Intervals]![Top] 
    Or (Depths.Depth) > [Intervals]![Bottom]))
ORDER BY Intervals.Name, Depths.Depth;

我知道这会失败,因为 Where 子句单独应用于 Interval 中的每个名称记录。 Where 子句应适用于按名称相关的所有间隔记录,因此结果不包括间隔表中的任何从上到下的间隔。

我的查询输出:

Name    Depth
one     1
one     1   
one     2    
one     3
one     4    
one     4
one     5
one     6
one     7
one     8   
one     8
three   1
three   2
three   5
two     1
two     4
two     5

期望的输出:所有深度都不是间隔

Name    Depth   
one     1       
one     4       
one     8       
two     1
two     4
two     5
three   1
three   2
three   5

【问题讨论】:

【参考方案1】:

您问题的措辞建议not exists,因此这可能对您有用:

select d.*
from depths as d
where not exists (select 1
                  from intervals as i
                  where i.name = d.name and d.depth between i.[top] and i.[bottom]
                 );

【讨论】:

以上是关于Access SQL 查询:返回值不在相关表的间隔之间的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 无法添加不在记录集中的表的记录连接键

关于access sql查询多表的问题

sql动态查询返回值的意义是啥呢?

MS Access 2007 查询不在 SQL Server 2008 上运行

根据一列/SQL Oracle 中的值创建时间间隔

SQL问题,子查询返回的值不止一个!