【问题标题】:Selecting unique values of keys inside postgresql json field在postgresql json字段中选择键的唯一值
【发布时间】:2017-05-04 16:42:36
【问题描述】:

我有以下型号:

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 和 shipping_number。

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

【问题讨论】:

  • 您是否正在寻找一个查询来做这件事?我不认为它可以在activerecord中完成。您必须触发 sql 查询。其他选择是在 ruby​​ 中执行,这可能会更慢。
  • @Joel_Blum 是的 sql 查询。我试图让它工作,但从未得到答案。

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


【解决方案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_* 替代。

【讨论】:

猜你喜欢
  • 2020-08-30
  • 2019-10-19
  • 1970-01-01
  • 2021-12-11
  • 2018-09-16
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多