ich eine PostgreSQL-Tabelle haben (Kreaturen), die wie folgt aussieht:PostgreSQL jsonb_array_elements mit Array von Hash-Elemente
| id <integer> | json <jsonb> |
-------------------------------
| 1 | {"name": "Grooper", "weaknesses":[{"type":"Fire", "value":2},{"type":"Dark", "value":2}]} |
| 2 | {"name": "Zik", "weaknesses":[{"type":"Fire", "value":2}]} |
Ich versuche, eine Abfrage zu erstellen, die auf Schwäche Art Filter, so dass ich gefiltert werden können alle Kreaturen mit Schwächen Arten Fire
oderDark
(enthalten entweder ein), aber mit Schwächen des Typs auf Kreaturen Fire
undDark
(müssen beide enthalten) abfragen, auch.
Ich habe eine Abfrage herausgefunden, dass mit Fire
oderDark
funktioniert:
select
distinct c.*
from
creatures c,
jsonb_array_elements(json->'weaknesses') as weakness
where weakness->'type' ?| array['Fire','Dark']
Wie kann ich diese Abfrage
auf Kreaturen der TypenFire
und
Dark
filtern zu arbeiten?
UPDATE:
Ich habe eine Abfrage, die zu erreichen scheint, was ich will, aber es nicht hübsch aussehen. Irgendwelche Tipps?
SELECT * FROM creatures
WHERE 'Fire' in (SELECT jsonb_array_elements(json->'weaknesses')->>'type')
AND 'Dark' in (SELECT jsonb_array_elements(json->'weaknesses')->>'type')
Danke, spielte mit diesem ein bisschen herum und sieht gut aus. –