在 Access 中使用 NOT LIKE 进行查询

GSR*_*SRB 2 sql ms-access sql-like

我正在使用如下查询。

SELECT * FROM TableName
WHERE ([Material Description] Not Like "*LICENSE*" Or 
       [Material Description] Not Like "*LICENCE*");
Run Code Online (Sandbox Code Playgroud)

但是,这会获取“材料描述”字段中包含带有 LICENSE 或 LICENSE 的记录的结果。请告知我缺少什么,以便我的查询产生的结果省略了“材料描述”字段中包含这些单词的记录。

luk*_*302 5

你真正想要的是AND介于两者之间:

SELECT * FROM TableName
WHERE ([Material Description] NOT LIKE '*LICENSE*' AND 
       [Material Description] NOT LIKE '*LICENCE*');
Run Code Online (Sandbox Code Playgroud)

您当前将选择记录“LICENSE”,因为它不包含“LICENCE”,并且选择记录“LICENCE”,因为它不包含“LICENSE”。您当前真正排除的记录是包含“LICENCE”和
“LICENSE” 的记录,可能不多;)。这种小小的混乱是由于 Or 与 Not 的结合使用而产生的。

实现相同目标的另一种方法是将 移到ed 条件NOT前面OR

SELECT * FROM TableName
WHERE NOT ([Material Description] LIKE '*LICENSE*' OR
           [Material Description] LIKE '*LICENCE*');
Run Code Online (Sandbox Code Playgroud)

这样,你真正想要实现的目标就更清楚了。
这将与真值表NOT (A OR B)相反(NOT A) OR (NOT B)并具有非常不同的真值表:

A  B  |  (  ~  A  )  &  (  ~  B  )
----------------------------------
0  0  |     1  0     1     1  0     
0  1  |     1  0     0     0  1     
1  0  |     0  1     0     1  0     
1  1  |     0  1     0     0  1 


A  B  |  ~  (  A  |  B  )
-------------------------
0  0  |  1     0  0  0     
0  1  |  0     0  1  1     
1  0  |  0     1  1  0     
1  1  |  0     1  1  1  
Run Code Online (Sandbox Code Playgroud)

你的真值表看起来像

A  B  |  (  ~  A  )  |  (  ~  B  )
----------------------------------
0  0  |     1  0     1     1  0     
0  1  |     1  0     1     0  1     
1  0  |     0  1     1     1  0    
1  1  |     0  1     0     0  1    
Run Code Online (Sandbox Code Playgroud)