#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 =’сине-красный’