MS Access очень длинный и ошибка «Выражение слишком длинное» - PullRequest
0 голосов
/ 09 декабря 2011

У меня SQL с условием около 50 «ИЛИ» и все с оператором «Мне нравится».Я выполняю этот SQL из кода доступа к VB.

Но запрос не может быть выполнен с ошибкой «Выражение слишком длинное» (в основном, я думаю, потому что он превышает 1024 символа в сетке запроса.

SELECT * 
  FROM <My Database> 
 WHERE (
        [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = '' 
        OR [Title] = ''
       ) 
       AND (
            [TITLE] LIKE '*Afghanistan*' 
            OR [TITLE] LIKE '*Term1*' 
            OR [TITLE] LIKE '*Term2*' 
            OR [TITLE] LIKE '*Term3*' 
            OR ..<around 40 like these> 
            OR [COUNTRY] LIKE '*Country1*' 
            OR ...<around 40 like these>
           );

Какие-нибудь идеи или предложения относительно того, как обойти эту проблему?

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Предложения: вставьте значения параметров в базовые промежуточные таблицы (возможно, в другую временную базу данных) и создайте seni-соединения к этим таблицам, используя EXISTS.Используйте ALIKE (вместо LIKE), в котором всегда используются стандартные символы подстановки SQL (%).

SELECT * 
  FROM MyTable AS m
 WHERE EXISTS (
               SELECT * 
                 FROM MyExactParams AS x
                WHERE m.Title = x.Title
              )
       AND (
            EXISTS (
                    SELECT * 
                      FROM MyPatternParams AS p
                     WHERE m.Title ALIKE '%' + p.Title + '%'
                   )
            OR EXISTS (
                       SELECT * 
                         FROM MyPatternCountries AS c
                        WHERE m.Country ALIKE '%' + c.Country + '%'
                      )
           );
0 голосов
/ 09 декабря 2011

Во-первых, спасибо за размещение этого отдельного вопроса на вашем предыдущем . Это правильный способ сделать это: -)

Повторяющиеся OR [Title] = '' вещи должны идти, они просто беспорядочные, вам нужен только один из них, при условии, что вы действительно должны соответствовать пустому заголовку.

Во-вторых, вам действительно нужны подстановочные знаки? Если база данных разработана правильно, поле с именем Country не должно содержать ничего, кроме названия страны, так что вы можете просто сказать [Country]='Afghanistan'.

Если вам не нужны символы подстановки, тогда ключевое слово IN становится полезным: вы можете проверить несколько вариантов, используя [Country] IN ('Afghanistan', 'Term1', 'Term2', 'Term3')

onedaywhen предложение очень хорошо (+1 от меня), но я боюсь, что ваш код указывает на некоторые проблемы дизайна. Что вы пытаетесь сделать с этим кодом: найти все? Подтвердить ввод? Найти по выбору пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...