Oracle-SQL: не учитывать AND, если параметр предложения WHERE равен нулю - PullRequest
0 голосов
/ 04 июля 2018

Я искал это, но не мог найти никакого решения пропиата для этого.

SELECT a, b, c FROM table WHERE d := parameter1 AND e := parameter2;

Так что, если заданы d и e, запрос результата работает. Параметр d всегда запрашивается, но e является необязательным, поэтому, если для e нет ввода, я не хочу рассматривать оператор AND e := parameter2 и получать все строки только с параметром d.

Ответы [ 4 ]

0 голосов
/ 04 июля 2018

Остальные ответы, как правило, правильные, , но на самом деле вам может быть лучше использовать 2 разных запроса и выбрать один из них в коде вызова. Хотя планы запросов умнее старых, их можно «заблокировать» на основе параметров, использованных в первом вызове. Если они нетипичны, вы можете получить план, который обычно не самый лучший. Это поведение будет варьироваться между двигателями БД (Oracle, я думаю, это довольно хорошо).

Поскольку вы уже знаете, есть ли у вас значение или нет, когда вы делаете вызов, просто выполните один бит SQL или другой.

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

0 голосов
/ 04 июля 2018
WHERE d = parameter1 AND (e = parameter2 OR parameter2 is null)

Пожалуйста, будьте осторожны с = вместо :=.

0 голосов
/ 04 июля 2018

Попробуйте это

SELECT a, b, c FROM table WHERE d := parameter1 AND case when e is null then parameter2 else e end := parameter2;
0 голосов
/ 04 июля 2018
SELECT a, b, c FROM table WHERE d := parameter1 AND (e is not null and e := parameter2 or e is null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...