Ich habe einen Tisch, an dem ich Informationen über meine Kaninchen speichern kann. Es sieht aus wie das:
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"]}');
Wie soll ich die Kaninchen finden, die Karotten mögen? Ich habe mir das ausgedacht:
select info->>'name' from rabbits where exists (
select 1 from json_array_elements(info->'food') as food
where food::text = '"carrots"'
);
Ich mag diese Abfrage nicht. Es ist ein Chaos.
Als Vollzeit-Kaninchenhalter habe ich keine Zeit, mein Datenbankschema zu ändern. Ich möchte nur meine Kaninchen richtig füttern. Gibt es eine besser lesbare Möglichkeit, diese Abfrage durchzuführen?