Как проверить, является ли внутреннее поле json ПУСТОЙ? - PullRequest
0 голосов
/ 02 марта 2020

Один из столбцов (называемых подробностями) в моей таблице относится к типу данных jsonb и имеет формат данных примерно так:

{"media_height":"350", "media_height":"450", "media_alt":"", "file_name":"myfile.jpeg"}

Это поле используется в том случае, если я хочу отметить записи пропущенного альтернативного текста.

SELECT
            distinct ON ( p.property_name )
                        p.id, p.property_name,
                        CASE
                            WHEN mma.id IS NULL THEN 'Z'
                            WHEN mma.details->'media_alt'::TEXT IS NULL THEN 'NO'
                            ELSE 'YES' END as has_media_alt
            FROM properties p
            LEFT JOIN marketing_media_associations mma ON ( mma.reference_id = p.id ) 
            GROUP BY p.id, p.property_name , mma.details->'media_alt', mma.id
            ORDER BY p.property_name, has_media_alt ASC

Приведенный выше запрос дает мне точные результаты для Z, но он никогда не идет в блок NO. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 02 марта 2020

Пустая строка отличается от NULL, вы, вероятно, захотите:

WHEN nullif(mma.details->>'media_alt', '') IS NULL THEN 'NO'  

Вам не нужно приводить к тексту, если вы используете ->>, который возвращает значение как text непосредственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...