在postgresql json字段中选择键的唯一值

时间:2016-12-19 15:21:47

标签: sql ruby-on-rails json ruby postgresql

我有以下型号:

Shipment:
  reference_numbers: [] :json field

参考字段的一般结构如下:

[{'reference_field_name': 'freight_number', 'reference_field_value': '0098'}, {'reference_field_name': 'bill_of_lading', 'reference_field_value': '1190' }]

此处的字段名称可能因交货而异。它可以是任何不仅仅是bill_of_lading和freight_number。

跨货件的reference_numbers查找'reference_field_name'的所有唯一值的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我知道,回答有点晚了但是对于那些有类似任务的人来说,有一些很酷的postgresql功能:)

首先,让不需要的reference_numbers进入表格:

select jsonb_array_elements("reference_numbers") as fields from shipment

这将返回一个包含一列的行集,每行将包含所有reference_numbers数组中的一个项目。因此,如果您有两个出货行,并且每个出货行在reference_numbers字段中有两个项目,则此查询将返回4个项目。

其次,让我们选择不同的字段:

with fields_rowset as (
    select 
        jsonb_array_elements("reference_numbers") as fields 
    from shipment
)
select DISTINCT fields->'reference_field_name' from fields_rowset

注意,我已经使用了jsonb_ *函数但是如果你有json字段,你必须使用json_ *替代。