访问不匹配或类似查询,其中一列不包含或与另一列不同

时间:2019-04-29 22:03:07

标签: sql ms-access ms-access-2010

我想设计一个查询,基本上要进行大量"Not Like "*x*",除了我不希望查询包含的所有内容都在另一列中。

我知道我可以一次使用标准并指定"Not like "*x*"来一次,但是我不知道如何对整个数据列执行not like

因此,从长远来看,我在公司网络的多个不同服务器上托管了一堆摄像机。这些摄像机中的每一个都在同一子网上,并且除IP地址的最后一个八位位组之外的所有内容都与服务器匹配。现在,我已经在查询中创建了一个字段,该字段会修剪IP的最后一个八位位组,因此,现在我基本上已经有了一个预先设置好的IP范围,说明摄像机的位置。但是,我没有每个摄像机的确切清单-确实没有一种快速的方法。

我有一个正在处理的问题列表,并且我注意到问题列表中出现了一些摄像机(基本上是一个包含一堆IP地址的表)。我想从报告中删除所有可能的摄像机实例。

我见过人们能够像圆柱一样进行比较的设计,但我想相反。我想生成一个查询,其中不包含“相机”列中的内容。

为此,我将在具有摄像机范围Camera Ranges和字段Camera Range的地方调用查询。

有没有办法可以做到这一点?

我愿意设计查询,甚至可以更改表以使其更易于执行查询。

1 个答案:

答案 0 :(得分:0)

类似于我提供的答案here,而不是使用否定选择,在该选择中您测试记录保存的值是否 不喜欢 另一个数据集中的任何记录,更简单的方法是匹配那些 类似于数据集的记录,并返回那些不匹配的记录。

要实现此目的,可以在left join子句中将is nullwhere条件结合使用,例如:

select 
    MainData.*
from 
    MainData left join ExclusionData on 
    MainData.TargetField like ExclusionData.Pattern
where 
    ExclusionData.Pattern is null

或者,如果模式字段尚未包含通配符运算符:

select 
    MainData.*
from 
    MainData left join ExclusionData on 
    MainData.TargetField like '*' & ExclusionData.Pattern & '*'
where 
    ExclusionData.Pattern is null

请注意,MS Access将无法在查询设计器中表示这样计算出的联接,但是MS Access使用的JET数据库引擎仍将能够解释和执行有效的SQL。