Использование одного оператора sql для разных комбинаций поиска - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в SQL, и я реализую этот метод поиска в моей программе Java, которая принимает поисковый ввод от 1 до 5 текстовых полей и ищет объект, удовлетворяющий критериям поиска.

4 из столбцы базы данных находятся в одной таблице, а 1 - в другой, что я могу присоединиться к поиску.

Дело в том, что это просто поиск AND, то есть если, например, вводится только имя, то искать объект с таким именем, но если имя и возраст имеют входные данные, то объект должен иметь оба. Я пришел к выводу, что это 31 поисковая комбинация, и я мог бы создать запрос AND для каждой из них, используя If, но могу ли я как-то создать один оператор SQL, который игнорирует пустой ввод, но включает его, если не пустой?

Пример Таблица для поиска лично

TextField 1 Имя: "Джон"

TextField 2 age: ""

TextField 3 вес: 120

TextField 4 hair color: "Green"

SQL будет игнорировать выбор из возраста, так как ввод был пустым, но используйте И для поиска других 3 условий.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Я бы использовал что-то вроде QueryDSL . Нет смысла создавать код для проблем, которые уже были решены, потому что вам нужно будет написать, протестировать и поддерживать этот код.

QueryDSL позволяет динамически создавать запросы, используя классы Java. Таким образом, вы бы добавили предложение для каждого из ваших полей ввода. Если вам когда-либо понадобится добавить или удалить текстовое поле, сделайте то же самое в своем коде.

0 голосов
/ 01 мая 2020

Одним из решений общей проблемы обработки параметров является использование or. Примерно так:

where (name = :name or :name is null) and
      (age = :age or :age is null) and
      . . .

Вы бы изменили предложение from, чтобы всегда join таблицы - возможно, с помощью left join (ваш вопрос не ясен). Или вы можете использовать подзапрос exists.

Примечание. Приведенная выше конструкция требует сканирования всех строк в таблице. Он не может использовать индексы. Однако индексирование таблицы для быстрого поиска по 2 ^ n комбинациям само по себе довольно сложно.

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