Получить записи, в которых ключ столбца json равен нулю
У меня есть таблица users
с столбцом json details
.
Я хочу получить все пользовательские записи, где детали [ "email" ] имеют нулевой или электронный ключ, не существует.
Это не работает:
SELECT users.* FROM users where details->'email' IS NOT NULL;
ERROR: operator does not exist: json -> boolean
Ответы
Ответ 1
используйте скобки ()
. Похоже, компилятор пытается увидеть это как details->('email' IS NOT NULL)
. Поэтому вы можете исправить это следующим образом:
select *
from users
where (details->'email') is not null
демонстрационная версия sql
на самом деле, чтобы получить записи, где детали [ "email" ] имеют значение null или адрес электронной почты не существует, вы можете использовать этот запрос:
select *
from users
where (details->>'email') is null
как описано в этом ответе.
Ответ 2
Для этого вам нужно использовать оператор ->>
:
select *
from users
where (details->>'email') is not null
Поскольку оператор ->
возвращает 'null'::json
(а не sql NULL
), если ключ существует, но имеет значение json null.
http://sqlfiddle.com/#!15/76ec4/2