Подтвердить что ты не робот

Получить записи, в которых ключ столбца json равен нулю

У меня есть таблица users с столбцом json details.

Я хочу получить все пользовательские записи, где детали [ "email" ] имеют нулевой или электронный ключ, не существует.

Это не работает:

SELECT users.* FROM users where details->'email' IS NOT NULL;

ERROR: operator does not exist: json -> boolean

4b9b3361

Ответ 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