Множественный запрос и в Access

#ms-access

#ms-access

Вопрос:

Мой запрос доступа действует так странно, предполагается, что запрос выбирает запись в соответствии с условием, но это не так. запрос является

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

когда я запускаю приведенный выше запрос, возвращаются все записи, содержащие ключевое слово blue.

если я добавлю больше word к этому запросу,

 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;
  

Ответ №1:

Помните о режиме запроса, который вы используете при выполнении этого запроса в сеансе Access. Подробное обсуждение режимов запросов Access’ ANSI-89 и ANSI-92 можно найти по этой ссылке: Сравнение Microsoft Access SQL и ANSI SQL

В другом из ваших вопросов о переполнении стека вы выполняли аналогичный запрос из c #, используя OleDb для работы с базой данных. OleDb означает, что ваш запрос будет выполняться в режиме ANSI-92, поэтому % является допустимым символом подстановки.

Однако для запроса, выполняемого в сеансе доступа, режимом по умолчанию является ANSI-89, что означает, что соответствующий подстановочный знак является * вместо % .

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

Если вы настроили доступ с помощью Сервис-> Параметры-> Вкладка Таблицы / Запросы, затем выбрали «Синтаксис, совместимый с SQL Server (ANSI 92)» для «Этой базы данных», в вашем запросе будут ожидаться подстановочные знаки ANSI-92.

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

Другой вариант — использовать оператор сравнения ALike вместо Like . ALike сигнализируйте ядру базы данных ожидать подстановочные знаки ANSI-92 независимо от того, где и как выполняется запрос. Таким образом, вы можете использовать подстановочный знак ANSI-92 в сеансе доступа, не устанавливая параметр, который я описал выше.

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

Комментарии:

1. спасибо, и это было очень полезно, это решило проблему.

2. Обратите внимание, что запуск вашей базы данных в режиме ANSI-92 может привести к ряду неожиданных последствий, таких как совершенно другой набор зарезервированных слов и неработающее автозаполнение в полях со списком.

Ответ №2:

попробуйте это, выберите отличное имя из таблицы1, где выполните поиск типа ‘%blue%’ И выполните поиск типа ‘% red%’, упорядочив по имени

Комментарии:

1. Rasel Я пробовал это, и это не работает в access, в access sql я пробовал это, и это не работает. я использую access 2007

2. вы пытаетесь получить строки, название которых ‘blue red’ или ‘red blue’?

3. я пытаюсь получить, где имя красное и синее

4. хорошо, затем используйте select Distinct name из table1, где name =’red blue’ или name =’сине-красный’