我有以下型号:
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'的所有唯一值的最佳方法是什么?
答案 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_ *替代。