我有一个表格X,其中一列是jsonb类型。
Jsonb包含json数组 - “cities”:[“aaaa”,“bbbb”,“cccc”]。
Postgresql 9.4提供了jsonb运算符来使用' - >'获取json数组元素
还有另一个表Y列表。
Y
a b个城市
aaaa
bbbb
CCCC
我想要展示 只有在Y.cities中存在X.jsonb->城市时,才从Y,X中选择Y.a,Y.b。
答案 0 :(得分:-1)
这是通过在json_array_elements
上进行横向连接(或者在本例中为json_array_elements_text
,因为y.cities可能是文本类型的)函数来完成的。您没有提供完整的示例模式,因此我会手动挥动一些未经测试的SQL来为您提供这个想法。
select *
from x
cross join json_array_elements_text(x.cities) AS x_cities(city)
inner join y on (x_cities.city = y.cities);
如果你打算使用json
,你需要在横向连接方面做得很好。
总的来说,我看到很多人使用json
,这是完全没必要的,简单的关系建模会更合适。想想你是否真的需要这样做。在这种情况下,似乎您必须使用数组,本机PostgreSQL text[]
数组会更好,但您应该使用连接表对其进行建模。