我有以下模型:
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_* 替代。