我有以下模型:

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。

跨 Shipments 的 reference_numbers 查找“reference_field_name”的所有唯一值的最佳方法是什么?

请您参考如下方法:

我知道,现在回答有点晚了,但是对于你们这些有类似任务的人来说,有一些很酷的 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_* 替代。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!