powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Формирование произвольного условия поиска. Я застрял на этом запросе
4 сообщений из 29, страница 2 из 2
Формирование произвольного условия поиска. Я застрял на этом запросе
    #33732646
rgb-dart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вас опять не понял.

Вот пример:
"найти все модели автомобилей не дороже $15000 И (масса < 6000 ИЛИ мощностью двигателя не менее 140 л.с. )?"

Вот запрос.
Код: plaintext
1.
2.
3.
4.
select t1.Vehicle
  from dbo.[VALUES] t1 inner join 
       dbo.[VALUES] t2 ON t2.Vehicle = t1.Vehicle 
      (t1.Property = 'Стоимость' and t1.VALUE <=  15000 ) and
      ((t2.Property = 'Масса' and t2.VALUE <  6000 ) OR (t2.Property = 'Мощность двигателя' and t2.VALUE >  140 ))

Где тут full outer join?

Даже если параметр 'Мощность двигателя' вообще не задан ни для одной машины, запрос выдаст те машины у которых масса < 6000 И стоимость <= 15000.

(Еще раз уточню что так оно в MS SQL 2000)
...
Рейтинг: 0 / 0
Формирование произвольного условия поиска. Я застрял на этом запросе
    #33732912
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык
ModelRЛибо логика генерации запроса будет непростая..
сравните Ваши запросы. А
"найти все модели автомобилей не дороже $15000
И (масса < 6000
ИЛИ (мощностью двигателя не менее 140 л.с.
И тип =дизель ))?"
...
Рейтинг: 0 / 0
Формирование произвольного условия поиска. Я застрял на этом запросе
    #33733565
rgb-dart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRДык
ModelRЛибо логика генерации запроса будет непростая..
сравните Ваши запросы. А
"найти все модели автомобилей не дороже $15000
И (масса < 6000
ИЛИ (мощностью двигателя не менее 140 л.с.
И тип =дизель ))?"
Теперь понял :)
Согласен, для данного примера составить запрос будет сложнее :)
Вопрос в том, будут ли поддерживаться такие вложенные И-ИЛИ запросы клиентской частью? ;)
...
Рейтинг: 0 / 0
Формирование произвольного условия поиска. Я застрял на этом запросе
    #33743749
Андрей - он же дядя Сэм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доделал. По ходу работы я решил кое-что изменить. А именно: добавить 2 временные таблицы для хранения промежуточных результатов (там идентификаторы Vehicle – только одно поле). Запросы просто летают, тут даже потестил на большее, чем 10 число условий – базе пока что всё равно. Оно и понятно – сложных-то соединений нет. Данных, конечно, у меня пока немного, но вроде всё адекватно ищется.

Почему сделал 2 временные тыблицы: я разбиваю сложный запрос на такие подзапросы: либо ...AND...AND... либо ...OR...OR... Там могут быть какие угодно условия, главное чтобы не пришлось возиться со сложным соединением таблиц.

Я решил, что лучшее - враг хорошего и не стоит пихать в один запрос много таблиц со сложными соединениями. Тем более, что формировалось бы всё это автоматом и про производительность сложно было бы что-то сказать. А так, поэкспериментировал с различными формами этих простых запросов, убедился, что они достаточно эффективны и написал в программе функцию, которая разбирает запрос и образует список запросов в нужном порядке для последовательного выполнения. На каждом этапе после выполнения данные заносятся во временную таблицу, а потом производится либо объединение новых результатов с сохранёнными, либо пересечение.

Что-то у меня не сработало в одной команде сначала объединение двух таблиц, а потом вставка их в третью. Это ограничение Firebird или я не так что-то делаю INSERT INTO T3 (ID) (SELECT ID FROM T1 UNION SELECT ID FROM T2) ? Я написал процедурку, которая делает эту вещь, но немного по-другому, без UNION. Но, вообще, странно…

И вот у меня вопрос, а насколько эффективен запрос, состоящий из двух: основного, который в своём условии содержит конструкцию SELECT … WHERE ID IN (SELECT ID FROM SOMETABLE). И его пара NOT IN, понятно. Поля ID каждой из таблиц индексированы (первичные ключи). Сдаётся мне, что сервер быстро выполнит этот запрос, но где-то читал, что на больших объёмах таблиц оператор IN лучше не применять. Что скажете по этому поводу? Использовать его или нет?
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Формирование произвольного условия поиска. Я застрял на этом запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]