| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Исключение записей по маске |
| Автор: Sor 4.11.2006, 15:05 |
| Вопрос в следующем: есть две таблички, в одной значения 123 234 345 456 В другой указаны маски 1 6 Нужен запрос который выводит разность таблиц относительно маски, т.е. на выходе табличка 234 345 подскажите как сделать... |
| Автор: Akina 5.11.2006, 00:19 | ||||||||
| Поскольку количество масок заранее не определено, влоб на SQL тут не вывернуться - MS Jet SQL не признает Match, а Like использовать не удастся. Однако задача решаема. Решим ее сначала построением нескольких запросов. Запрос Q1 - просто посчитает нам количество масок.
Запрос Q2 перемножит нам таблицы, и для каждой строки определит вхождение маски в строку
Запрос Q3 Сгруппирует результаты запроса Q2
И, наконец, следующий запрос сравнит результаты запросов Q1 и Q3, выведя только те строки, где равенство (т.е. не найдено ни единого совпадения с маской)
На глаз это должно заработать. Если нет - ищи и исправляй ошибки в реализации логики. А когда отладишь - просто собери все это в один запрос. |
| Автор: Sor 5.11.2006, 07:29 |
| Спасибо, сейчас попробую. А то в голову ничего не приходит кроме сбора строчки вида SELECT * FROM table1 WHERE table1.field1 NOT LIKE ("*mask1*") AND table1.field1 NOT LIKE ("*mask2*") ..... Кстати, насколько длинный может быть запрос? |
| Автор: Akina 5.11.2006, 13:01 |
Это ты не обойдешься одним запросом - я про это говорил. Нельзя использовать набор записей для составления наборов масок с использованием их в одном условии отбора. Да тебе-то какой не наплевать? пусть Аксесс разбирается... |
| Автор: Sor 5.11.2006, 13:47 |
| запрос который я привел в качестве примера - работает поэтому про длину запроса и спросил, если у меня масок будет 100 или 1000, прожует аксесс это или нет? |
| Автор: bopoha 10.11.2006, 02:21 | ||||
Есть такой вариант:
только он очень медленный. и побыстрее:
рекомендую использовать второй вариат для простоты маска это: *1* *6* запросы выполнялись в Access 2003 |
| Автор: bopoha 12.11.2006, 03:49 |
| В последней инструкции небольшая ошибочка, забыл про NOT. И работает она верно толькое без NOT, т.е. когда нужно выбрать все записи удовлетворяющие маскам. |