Могу ли я использовать фильтр «IN» для таблицы базы данных Advantage (TAdsTable)? - PullRequest
3 голосов
/ 10 июня 2011

Я хочу применить фильтр к таблице преимуществ, используя несколько значений для поля Integer.

Эквивалентный SQL будет:

SELECT * FROM TableName WHERE FieldName IN (1, 2, 3)

Можно ли сделать то же самое на AdsTable, если нужно повторить поле, используя «ИЛИ»?

Я хочу что-то вроде:

Filter := 'FieldName IN (1, 2, 3)'

Вместо:

Filter := 'FieldName = 1 OR FieldName = 2 OR FieldName = 3'

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Для этого можно использовать функцию INLIST.Эта функция существует для совместимости с Visual FoxPro.Это будет выглядеть так:

Filter := 'InList(FieldName, 1, 2, 3)';

Однако я не верю, что в настоящее время он оптимизирован для использования индекса.Поэтому, если таблица очень большая, будет гораздо эффективнее использовать версию фильтра FieldName = 1 OR FieldName = 2 ....

1 голос
/ 20 июня 2011

Синтаксис IN работает только для SQL, а не для механизма выражений, который используется в фильтрах и индексах.

Как уже было предложено Марком, я бы использовал синтаксис FieldName = 1 OR FieldName = 2 ....

Дополнительная информация о Advantage Expression Engine и Advantage Optimized filters находится в справке:

http://devzone.advantagedatabase.com/dz/WebHelp/Advantage10.1/master_advantage_expression_engine.htm

http://devzone.advantagedatabase.com/dz/WebHelp/Advantage10.1/master_advantage_optimized_filters.htm

...