Я пытаюсь получить строки, когда определенное условие удовлетворяет
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 как нулевые или целые значения, и я хочу проверить ее непосредственно в одном запросе. Есть ли способ сделать это в одном запросе?
Если вы хотите сравнить значение столбца с переменной связывания и сопоставить их как для значений 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