J'ai une table pour stocker des informations sur mes lapins. Cela ressemble à ceci:
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"]}');
Comment trouver les lapins qui aiment les carottes? Je suis venu avec ceci:
select info->>'name' from rabbits where exists (
select 1 from json_array_elements(info->'food') as food
where food::text = '"carrots"'
);
Je n'aime pas cette question. C'est le bordel.
En tant que lapin gardien à plein temps, je n'ai pas le temps de changer le schéma de ma base de données. Je veux juste nourrir correctement mes lapins. Existe-t-il un moyen plus lisible de faire cette requête?