Как написать запрос по поиску записей с исключенным json-значением и несуществующим json-ключом одновременно?
У меня есть таблица students с json колонкой с названием json. В этой колонке есть разные ключи. Мне нужно вытянуть записи, у которых нет конкретного значения Fail в ключе rating и одновременно мне нужны записи, где json ключ rating не существует. Как это возможно реализовать?
# Объекты
json: { rating: 'Pass' }
json: { grade: 'A' }
json: { rating: 'Fail' }
В общем, мне нужно исключить из результата записи с rating: 'Fail' и вернуть все остальные записи, включая те, у которых json-ключ rating не существует.
Результат запроса должен быть следующим:
json: { rating: 'Pass' }
json: { grade: 'A' }
Спасибо заранее!
Ответы (2 шт):
Автор решения: Akina
→ Ссылка
SELECT * FROM test
EXCEPT
SELECT * FROM test WHERE val->>'rating' = 'Fail'
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=ba33df3cb3903b9a166475af38b51490
Автор решения: Василиса
→ Ссылка
Придётся всё же вспомнить чистый sql
Student.where("json ->> 'rating' != 'Fail' OR json ->> 'rating' IS NULL")