Как сравнить нулевые и ненулевые значения в одном выражении в оракуле?

Я пытаюсь получить строки, когда определенное условие удовлетворяет

select * from users where userid = :userid and objnum = :objnum;

В таблице пользователей есть идентификатор пользователя (столбец, не допускающий значения NULL) и objnum (столбец, допускающий значение NULL). Теперь, когда я хочу получить пользователей с нулевыми значениями "обжнум", это не работает, поскольку нулевые значения несопоставимы. И когда я хочу получить значение objnum = 1, тогда будет работать выше.

Для нулевого значения я очень хорошо получаю результаты с запросом ниже.

select * from users where userid = :userid and objnum is null;

Но мой код приложения отправляет переменную связывания :objnum как нулевые или целые значения, и я хочу проверить ее непосредственно в одном запросе. Есть ли способ сделать это в одном запросе?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите сравнить значение столбца с переменной связывания и сопоставить их как для значений NULL, так и для значений, отличных от NULL, то для значений NULL вам нужно сравнить обе стороны с NULL:

SELECT *
FROM   users
WHERE  (userid = :userid OR (userid IS NULL AND :userid IS NULL))
AND    (objnum = :objnum OR (objnum IS NULL AND :objnum IS NULL));

Хотя мне не нужен userId, так как он в любом случае не будет нулевым. Он работает как шарм для objnum. Спасибо @MT0

netcoredev 08.04.2022 11:08

Другие вопросы по теме