Mam tabelę do przechowywania informacji o moich królikach. To wygląda tak:
create table rabbits (rabbit_id bigserial primary key, info json not null);
insert into rabbits (info) values
('{"name":"Henry", "food":["lettuce","carrots"]}'),
('{"name":"Herald","food":["carrots","zucchini"]}'),
('{"name":"Helen", "food":["lettuce","cheese"]}');
Jak znaleźć króliki, które lubią marchewki? Wymyśliłem to:
select info->>'name' from rabbits where exists (
select 1 from json_array_elements(info->'food') as food
where food::text = '"carrots"'
);
Nie podoba mi się to zapytanie. To bałagan.
Jako pełnoetatowy opiekun królików nie mam czasu na zmianę schematu bazy danych. Chcę tylko odpowiednio karmić moje króliki. Czy istnieje bardziej czytelny sposób wykonania tego zapytania?