Есть ли способ изменить поведение запросов MySQL в зависимости от значений аргументов? - PullRequest
1 голос
/ 13 апреля 2019

Я работаю над проектом с функцией поиска и пытаюсь выполнить определенный поиск с помощью одного запроса MySQL. У меня проблема в том, что некоторые параметры запроса не являются обязательными, поэтому они могут быть нулевыми. Есть ли способ сделать запрос MySQL, который "игнорирует" свои собственные части, если какой-либо параметр имеет значение null? Я хотел бы избежать написания процедур в БД. Мы используем Spring Boot с JPA.

Я не могу найти какие-либо решения в Интернете, если в любом случае это дублирует ссылку на этот вопрос.

В этом простом примере я хотел бы знать, возможно ли сделать запрос таким образом, чтобы сравнение между ownerName (? 2) и вложенным выбором могло возвращать TRUE, если ownerName равно NULL.

@Query(
    value= "SELECT * FROM car WHERE car.name = ?1 
       AND ?2 = (SELECT person.name FROM person WHERE person.id = car.owner_id)",
    nativeQuery = true)  
List<Car> findCarsByNameAndOwnerName(String carName, String ownerName);

1 Ответ

1 голос
/ 13 апреля 2019

Да, вы можете сделать эту работу, применив предикат OR <parameter> IS NULL. Например, чтобы сделать оба параметра необязательными, вы можете сделать так:

@Query(
value= "SELECT * FROM car WHERE (car.name = ?1 OR ?1 IS NULL)
   AND (?2 = (SELECT person.name FROM person WHERE person.id = car.owner_id) OR ?2 IS NULL)",
nativeQuery = true)  
List<Car> findCarsByNameAndOwnerName(String carName, String ownerName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...