Access查询中的多个AND

时间:2011-04-28 08:37:20

标签: ms-access

我的访问查询行为如此奇怪,查询应该根据条件选择记录,但它不是这样做的。 查询是

select Distinct name from table1 where search like '%blue%' order by name

当我运行上述查询时,返回的所有记录都包含蓝色关键字。

如果我在此查询中添加更多字词,

select Distinct name from table1 where search like '%blue%' And '%red%' order by name

应该选择那些蓝色和红色的记录。但它返回的是蓝色或红色的记录。它不适用于和。 这是表结构

id         path              name            search_keyword
1          c:\my picture\    red door           red;
2          c:\my picture\    red door           38;
3          c:\my picture\    red door           wood; 
4          c:\my picture\    red door           2500;
5          c:\my picture\    red door           smooth
6          c:\my picture\    blue door          blue ;
7          c:\my picture\    blue door           38;
8          c:\my picture\    blue door           wood; 
9          c:\my picture\    blue door           2600;
19         c:\my picture\    blue door           smooth;

2 个答案:

答案 0 :(得分:2)

在Access会话中运行该查询时,请注意您正在使用的查询模式。您可以在此链接中找到有关Access'ANSI-89和ANSI-92查询模式的详细讨论:Comparison of Microsoft Access SQL and ANSI SQL

在您的另一个Stack Overflow问题中,您使用OleDb从c#运行类似的查询来操作数据库。 OleDb表示您的查询将以ANSI-92模式运行,因此%是有效的通配符。

但是,对于在Access会话中运行的查询,默认模式为ANSI-89,这意味着相应的通配符为*而不是%

SELECT DISTINCT [name]
FROM table1
WHERE search_keyword Like '*blue*'
ORDER BY [name]

如果您已配置Access by Tools-&gt; Options-&gt; Tables / Queries选项卡,则选择“SQL Server兼容语法(ANSI 92)” “This Database”< / em>,您的查询将需要ANSI-92通配符。

SELECT DISTINCT [name]
FROM table1
WHERE search_keyword Like '%blue%'
ORDER BY [name]

另一种选择是使用ALike代替Like比较运算符。 ALike表示数据库引擎需要ANSI-92通配符,无论查询在何处以及如何运行。这样,您可以在Access会话中使用ANSI-92通配符,而无需设置上述选项。

SELECT DISTINCT [name]
FROM table1
WHERE search_keyword ALike '%blue%'
ORDER BY [name]

答案 1 :(得分:0)

试试这个 从table1中选择不同的名称,其中搜索类似'%blue%'并按名称搜索'%red%'