【发布时间】:2016-04-20 02:30:52
【问题描述】:
我有一个 PostgreSQL 表(生物),如下所示:
| id <integer> | json <jsonb> |
-------------------------------
| 1 | {"name": "Grooper", "weaknesses":[{"type":"Fire", "value":2},{"type":"Dark", "value":2}]} |
| 2 | {"name": "Zik", "weaknesses":[{"type":"Fire", "value":2}]} |
我正在尝试创建一个过滤弱点类型的查询,这样我就可以过滤所有具有弱点类型的生物 Fire 或 Dark(包含任何一个),但也查询具有Fire 和 Dark 类型弱点的生物(必须同时包含两者)。
我找到了一个适用于Fire 或 Dark的查询:
select
distinct c.*
from
creatures c,
jsonb_array_elements(json->'weaknesses') as weakness
where weakness->'type' ?| array['Fire','Dark']
我怎样才能让这个查询过滤Fire 和 Dark类型的生物?
更新:
我有一个查询似乎可以完成我想要的,但它看起来并不漂亮。有什么建议吗?
SELECT * FROM creatures
WHERE 'Fire' in (SELECT jsonb_array_elements(json->'weaknesses')->>'type')
AND 'Dark' in (SELECT jsonb_array_elements(json->'weaknesses')->>'type')
【问题讨论】:
标签: postgresql postgresql-9.4 jsonb