如何查找一个表的Postgresql Json数组元素匹配另一个表的不同列值

时间:2015-08-20 00:14:05

标签: arrays json postgresql join jsonb

我有一个表格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。

1 个答案:

答案 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[]数组会更好,但您应该使用连接表对其进行建模。